合并两个list集合并且排序

简介: 集合合成的话List<Article> list1 = new ArrayList<Article>();  /*.....添加数据.......*/List<Article> list2 = new ArrayList<Article>();  /*.....添加数据.......*/list1.addAll(list2); 一、被


集合合成的话

List<Article> list1 = new ArrayList<Article>();
 /*.....添加数据.......*/
List<Article> list2 = new ArrayList<Article>();
 /*.....添加数据.......*/
list1.addAll(list2);




 一、被比较对象需实现Comparable接口中的compareTo方法


/**
* 根据order对User排序
*/
public class User implements Comparable<User>{
    private String name;
    private Integer order;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    public int compareTo(User arg0) {
         return this.getOrder().compareTo(arg0.getOrder());
     }
}


测试代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test{
    public static void main(String[] args) {
        User user1 = new User();
        user1.setName("a");
        user1.setOrder(1);
        User user2 = new User();
        user2.setName("b");
        user2.setOrder(2);
        List <User>  list = new ArrayList<User>();
        //此处add user2再add user1
        list.add(user2);
        list.add(user1);
        for(User u : list){
            System.out.println(u.getName());
        }
        Collections.sort(list);
        for(User u : list){
            System.out.println(u.getName());
        }
    }
}

输出结果

b

a

a

b


二、自定义一个比较器Comparator实现compare方法(这里采用匿名内部类的形式)

/**
* 根据order对User排序
*/
public class User {//此处无需实现Comparable接口
    private String name;
    private Integer order;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    
}


传入比较器,测试代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test{
    public static void main(String[] args) {
        User user1 = new User();
        user1.setName("a");
        user1.setOrder(1);
        User user2 = new User();
        user2.setName("b");
        user2.setOrder(2);
        List<User> list = new ArrayList<User> ();
        list.add(user2);
        list.add(user1);
        
         Collections.sort(list,new Comparator<User>(){
            public int compare(User arg0, User arg1) {
                return arg0.getOrder().compareTo(arg1.getOrder());
            }
        });
        for(User u : list){
            System.out.println(u.getName());
        }
    }
}


三、多属性比较

添加一个id属性

/**
* 多属性排序
*/
public class User {
    private Integer id;
     private String name;
    private Integer order;
    public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    
}


测试代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test{
    public static void main(String[] args) {
        User user1 = new User();
        user1.setId(1);
        user1.setName("a");
        user1.setOrder(1);
        User user2 = new User();
        user2.setId(2);
        user2.setName("a");
        user2.setOrder(1);
        List<User> list = new ArrayList<User> ();
        list.add(user2);
        list.add(user1);
        
         Collections.sort(list,new Comparator<User>(){
            public int compare(User arg0, User arg1) {
            //第一次比较order
               int i = arg0.getOrder().compareTo(arg1.getOrder());
               
               //如果order相同则比较name
               if(i==0){
        
             int j= arg0.getName().compareTo(arg1.getName());
            
             //如果name相同则比较id
             
             if (j==0){
              
              return arg0.getId().compareTo(arg1.getId());
             }
             return j;
               }
               return i;
            }
        });
        for(User u : list){
            System.out.println(u.getId());
        }
    }
}




参考文章:

http://zhidao.baidu.com/link?url=pLKlH1ymBXeFBnYsadJc_UhC4N6yJRmovyp_DJlC9pAvJrrLemK6IkDVnjtdm7bYXGTocVtm-9EXfb7YvH9B1a

 



本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1661925

目录
相关文章
|
4天前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
1天前
|
Python
两个list集合合并成一个python教程 - 蓝易云
在这两种方法中,加号会创建一个新的列表,而extend方法则会在原地修改列表。
5 0
|
4天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
11 0
|
4天前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型
|
4天前
|
算法
递归淘汰List集合头部数据,获取最终集合的起始坐标
递归淘汰List集合头部数据,获取最终集合的起始坐标
|
4天前
|
Java
list集合 使用java8同一列表获取前一条的数据放到当前对象中
list集合 使用java8同一列表获取前一条的数据放到当前对象中
|
4天前
|
存储 安全 Java
Java集合详解(List、Map、Set)
Java集合详解(List、Map、Set)
34 4
|
4天前
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
52 1
|
4天前
|
搜索推荐 算法 C++
list容器-排序案例讲解
list容器-排序案例讲解
10 0
|
4天前
|
算法 C++ 容器
list容器-反转和排序讲解39
list容器-反转和排序讲解39
22 0