合并两个list集合并且排序

来源:互联网 发布:ne555数据手册 编辑:程序博客网 时间:2024/05/16 08:17

集合合成的话

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

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


[java] view plain copy
  1. /** 
  2. * 根据order对User排序 
  3. */  
  4. public class User implements Comparable<User>{  
  5.     private String name;  
  6.     private Integer order;  
  7.     public String getName() {  
  8.         return name;  
  9.     }  
  10.     public void setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.     public Integer getOrder() {  
  14.         return order;  
  15.     }  
  16.     public void setOrder(Integer order) {  
  17.         this.order = order;  
  18.     }  
  19.     public int compareTo(User arg0) {  
  20.          return this.getOrder().compareTo(arg0.getOrder());  
  21.      }  
  22. }  


测试代码

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.List;  
  4. public class Test{  
  5.     public static void main(String[] args) {  
  6.         User user1 = new User();  
  7.         user1.setName("a");  
  8.         user1.setOrder(1);  
  9.         User user2 = new User();  
  10.         user2.setName("b");  
  11.         user2.setOrder(2);  
  12.         List <User>  list = new ArrayList<User>();  
  13.         //此处add user2再add user1  
  14.         list.add(user2);  
  15.         list.add(user1);  
  16.         for(User u : list){  
  17.             System.out.println(u.getName());  
  18.         }  
  19.         Collections.sort(list);  
  20.         for(User u : list){  
  21.             System.out.println(u.getName());  
  22.         }  
  23.     }  
  24. }  

输出结果

b

a

a

b


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

[java] view plain copy
  1. /** 
  2. * 根据order对User排序 
  3. */  
  4. public class User {//此处无需实现Comparable接口  
  5.     private String name;  
  6.     private Integer order;  
  7.     public String getName() {  
  8.         return name;  
  9.     }  
  10.     public void setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.     public Integer getOrder() {  
  14.         return order;  
  15.     }  
  16.     public void setOrder(Integer order) {  
  17.         this.order = order;  
  18.     }  
  19.       
  20. }  


传入比较器,测试代码

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.Comparator;  
  4. import java.util.List;  
  5. public class Test{  
  6.     public static void main(String[] args) {  
  7.         User user1 = new User();  
  8.         user1.setName("a");  
  9.         user1.setOrder(1);  
  10.         User user2 = new User();  
  11.         user2.setName("b");  
  12.         user2.setOrder(2);  
  13.         List<User> list = new ArrayList<User> ();  
  14.         list.add(user2);  
  15.         list.add(user1);  
  16.           
  17.          Collections.sort(list,new Comparator<User>(){  
  18.             public int compare(User arg0, User arg1) {  
  19.                 return arg0.getOrder().compareTo(arg1.getOrder());  
  20.             }  
  21.         });  
  22.         for(User u : list){  
  23.             System.out.println(u.getName());  
  24.         }  
  25.     }  
  26. }  


三、多属性比较

添加一个id属性

[java] view plain copy
  1. /** 
  2. * 多属性排序 
  3. */  
  4. public class User {  
  5.     private Integer id;  
  6.      private String name;  
  7.     private Integer order;  
  8.     public Integer getId() {  
  9.   return id;  
  10.  }  
  11.  public void setId(Integer id) {  
  12.   this.id = id;  
  13.  }  
  14.  public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.       
  21.     public Integer getOrder() {  
  22.         return order;  
  23.     }  
  24.     public void setOrder(Integer order) {  
  25.         this.order = order;  
  26.     }  
  27.       
  28. }  


测试代码

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.Comparator;  
  4. import java.util.List;  
  5. public class Test{  
  6.     public static void main(String[] args) {  
  7.         User user1 = new User();  
  8.         user1.setId(1);  
  9.         user1.setName("a");  
  10.         user1.setOrder(1);  
  11.         User user2 = new User();  
  12.         user2.setId(2);  
  13.         user2.setName("a");  
  14.         user2.setOrder(1);  
  15.         List<User> list = new ArrayList<User> ();  
  16.         list.add(user2);  
  17.         list.add(user1);  
  18.           
  19.          Collections.sort(list,new Comparator<User>(){  
  20.             public int compare(User arg0, User arg1) {  
  21.             //第一次比较order  
  22.                int i = arg0.getOrder().compareTo(arg1.getOrder());  
  23.                  
  24.                //如果order相同则比较name  
  25.                if(i==0){  
  26.           
  27.              int j= arg0.getName().compareTo(arg1.getName());  
  28.               
  29.              //如果name相同则比较id  
  30.                
  31.              if (j==0){  
  32.                 
  33.               return arg0.getId().compareTo(arg1.getId());  
  34.              }  
  35.              return j;  
  36.                }  
  37.                return i;  
  38.             }  
  39.         });  
  40.         for(User u : list){  
  41.             System.out.println(u.getId());  
  42.         }  
  43.     }  
  44. }  


原创粉丝点击