java List排序一

java List对象排序有多种方法,下面是其中两种


第一种方法,list中的对象实现Comparable接口:

public class Person implements Comparable<Person> {
    private String name;
    private Integer order;
  
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
  
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
  
    /**
     * @return the order
     */
    public Integer getOrder() {
        return order;
    }
  
    /**
     * @param order
     *            the order to set
     */
    public void setOrder(Integer order) {
        this.order = order;
    }
  
    @Override
    public int compareTo(Person arg0) {
        return this.getOrder().compareTo(arg0.getOrder());
    }
  
}
public static void main(String[] args) {
    List<Person> listA = new ArrayList<Person>();
    Person p1 = new Person();
    Person p2 = new Person();
    Person p3 = new Person();
  
    p1.setName("name1");
    p1.setOrder(1);
    p2.setName("name2");
    p2.setOrder(2);
    p3.setName("name3");
    p3.setOrder(3);
  
    listA.add(p2);
    listA.add(p1);
    listA.add(p3);
    Collections.sort(listA);
    for (Person p : listA) {
        System.out.println(p.getName());
    }
}


第二种方法,就是在重载Collections.sort方法,代码如下:

public class Person {
    private String name;
    private Integer order;
  
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
  
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
  
    /**
     * @return the order
     */
    public Integer getOrder() {
        return order;
    }
  
    /**
     * @param order
     *            the order to set
     */
    public void setOrder(Integer order) {
        this.order = order;
    }
  
}
public static void main(String[] args) {
        List<Person> listA = new ArrayList<Person>();
        Person p1 = new Person();
        Person p2 = new Person();
        Person p3 = new Person();
  
        p1.setName("name1");
        p1.setOrder(1);
        p2.setName("name2");
        p2.setOrder(2);
        p3.setName("name3");
        p3.setOrder(3);
  
        listA.add(p2);
        listA.add(p1);
        listA.add(p3);
          
        Collections.sort(listA, new Comparator<Person>() {
            public int compare(Person arg0, Person arg1) {
                return arg0.getOrder().compareTo(arg1.getOrder());
            }
        });
          
        for (Person p : listA) {
            System.out.println(p.getName());
        }
    }

以下示例转自于:http://www.cnblogs.com/wentiertong/archive/2011/03/07/1973698.html


虽然这两种方法都没法满足我现在的需求,因为我的需求不是简单比较一个字段,是多种层依懒的树弄关系。具体请看下节。


2019-03-28 12:37

知识点

相关教程

更多

java中list、set和map 的区别(转)

List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashM

Java 异常处理

Java 异常处理    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。  比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.

Java 数组

Java 数组    数组对于每一门编辑应语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。  Java语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如numbers[100]来代替直接声明100个独立

JAVA WEB

我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博,唯独喜欢百度贴吧,潜水很久了,手痒来给新人分享下从新手成长为老鸟的已见,也刷刷存在感,应该不比曝照差吧。首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set map,然后是线程、IO和jdbc什么的,其余的,若是一时不理解,可以后边需要时再学。这阶段完了,你可以写些能在控

redis整合spring示例二—java操作redis(存对象及List)

在java操作redis中,咱们已经有了基本的java操作redis相关代码。下面继续 redis存放对象和List可通过对它们先序列化,然后存到redis中。 对象序列化及反序列化工具类: package com._656463.redis; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;impo

Solr使用函数排序

电子商务搜索引擎http://demo.rivues.com:195中有一个功能是按照销售量排序,销售量的数据是实时统计的,检索的时候有一个功能是按照销售量来排序,这个功能用到了Solr的函数排序(Sort By Function,Solr 4.0的功能,Solr 4.0还有一个比较有用的功能是分组统计 group),自定义的函数代码如下: public class SortSalesFuncti

使用Hadoop MapReduce 进行排序

在Hadoop中的例子TeraSort,就是一个利用mapredue进行排序的例子。本文参考并简化了这个例子: 排序的基本思想是利用了mapreduce的自动排序功能,在hadoop中,从map到reduce阶段,map出来的结构会按照各个key按照 hash值分配到各个reduce中,其中,在reduce中所有的key都是有序的了。如果使用一个reduce,那么我们直接将他output出来就 行

Hadoop HelloWord - 排序

抓紧时间Hadoop入门。不得不说Hadoop the Definitive Guide是本好书(下载见下面),但是却不是一本好的入门书,一上来讲了一堆各种Hadoop架构,对与一个菜鸟来说读起来总感觉有点心虚,一行Hadoop代码没写过,一直看各种Hadoop的架构,让人感觉非常的不踏实。找来找去也只是看到一个WordCount的demo,还好实验室Xia兄推荐了个文档,是虾皮工作室写的,名字叫

Python 列表(list)操作

列表就像java里的collection,所具有的特性也要比元组更多,更灵活,其character总结如下:
任意对象的有序集合;可通过偏移存取,注意,列表中的元素都是可变的,这是不同于元组的;
长度可变,支持嵌套;还有一些类似java的对象引用机制

FreeMarker集合(List、Map)

我们上一节认识了FreeMarker基本数据类型,接口认识FreeMarker集合(List、Map)​

Java 泛型

Java 泛型    如果我们只写一个排序方法,就能够对整形数组、字符串数组甚至支持排序的任何类型的数组进行排序,这该多好啊。  Java泛型方法和泛型类支持程序员使用一个方法指定一组相关方法,或者使用一个类指定一组相关的类型。 Java泛型(generics)是JDK 5中引入的一个新特性,泛型提供

Java 集合框架

Java 集合框架    早在Java 2中之前,Java就提供了特设类。比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组。  虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用Vector类的方式和使用Proper

Java 数据结构

Java 数据结构    Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:      枚举(Enumeration)  位集合(BitSet)  向量(Vector)  栈(Stack)  字典(Dictionary)  哈希表(Hashtab

Gradle构建JAVA项目

/worksp/gradle/src/main/java/com656463目录中

《编程之道 Java》(Program JAVA)[ISO]

本教材的第1章到第7章讲述了怎样学习Java和Java的基础知识,以及面向对象的编程思想;第8章到第11章,主要讲述了Java的核心技术:抽象、接口、封装、继承等。

最新教程

更多

java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

HttpClient 上传文件

我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案