合并两个list集合并且排序


集合合成的话

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

时间: 2024-08-31 10:23:13

合并两个list集合并且排序的相关文章

剑指offer系列之十五:合并两个排序的链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 这道题我的第一思路这样的:可以先遍历这两个排序的链表,把遍历的结果存放在一个集合中,然后调用库函数Arrays.sort方法完成排序,之后,根据这些排好序的结果重新创建一个链表,即为合并之后但仍然排序的链表.但是这种思路需要额外的List和创建链表的空间开销,而且时间复杂度最快也是O(nlogn).所以不是很理想.第二种思路是这样的:因为两个链表都是排序的,所以可以先比较两个链表的头结点,这样

剑指Offer之合并两个排序的链表

题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数. 下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素.接下来一行包含m个元素,s(1

java实现合并两个已经排序的列表实例代码_java

相对于C++来说,Java的最大特点之一就是没有令人困惑的指针,但是我们不可否认,在某些特定的情境下,指针确实算的上一把利刃.虽然Java中没有明确定义出指针,但是由于类的思想,我们可以使用class来实现指针的操作.小二,上栗子-----合并两个已经排序的列表,输出合并后列表的头结点,且合并后的列表中的元素是有序的. 需要时刻铭记于心的:在Java中,列表的一个节点其实就是某个类实例化的一个对象. 示例代码如下: 复制代码 代码如下: package DecemberOf2013; class

LeetCode 21 Merge Two Sorted Lists(合并两个已排序的数组)

翻译 合并两个排好序的链表,并返回这个新链表. 新链表应该由这两个链表的头部拼接而成. 原文 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 代码 /** * Definition for singly-linked list. * struct ListNode

php匿名函数-php 合并两个函数,匿名函数用过的进来

问题描述 php 合并两个函数,匿名函数用过的进来 $tmparr = ['name'='dddd','name'=>'aaaaa','name'=>'ddd','name'=>'cccc']; 使用 :sortArr($tmpArr,'name'); 这样可以将二维数组按指定的KEY排序.但这样的话是两个函数比较麻烦.想合成一个. function sortArr(&$tmpArr, $key, $asc = true) { usort($tmpArr,sortArr2($ke

在C#中自己写程序代码合并两个ACCESS数据库,如表a1.姓名插入a2.姓名里,我是这样写的,可就是不对

问题描述 在C#中自己写程序代码合并两个ACCESS数据库,如表a1.姓名插入a2.姓名里,我是这样写的,可就是不对if(this.openFileDialog1.ShowDialog()==DialogResult.OK){this.textBox2.Text=openFileDialog1.FileName.ToString();}try{if(textBox2.Text!=null){stringlink_tex0="Provider=Microsoft.Jet.OLEDB.4.0;Dat

c++-编写程序,求两个整数集合的并集。。。

问题描述 编写程序,求两个整数集合的并集... 编写程序,求两个整数集合的并集...能不能把下面这个修改一下??如果可以,再写一个完整的程序也可以 解决方案 这是按照你的思路写的(假设a b两个数组内没有重复的数字) #include <iostream> #include <stdlib.h> using namespace std; void arrunion(int a[], int b[], int r[], int an, int bn, int * n) { *n =

使用不同的方法结合/合并两个JS数组_javascript技巧

这是一篇简单的文章,关于JavaScript数组使用的一些技巧.我们将使用不同的方法结合/合并两个JS数组,以及讨论每个方法的优点/缺点. 让我们先考虑下面这情况: 复制代码 代码如下: var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; var b = [ "foo", "bar", "baz", "bam", "bun", "fun" ]; 很显然最简单的结

wav合并-java 怎么合并两个wav的音频文件,实现混音效果

问题描述 java 怎么合并两个wav的音频文件,实现混音效果 现在想搞一下,把两个wav文件合并成一个实现混音效果,哪位了解怎么实现啊? 解决方案 http://pan.baidu.com/s/1c0nuR6K 解决方案二: http://pan.baidu.com/s/1c0nuR6K