1. 程式人生 > >兩個List合併去重,並排序

兩個List合併去重,並排序

一:去重
在工作中,我們經常需要對兩個List進行合併去重,對於List中的資料不同,有不同的處理方式。
1.List中是基礎資料型別

        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        list1.add(new Integer(5));
        list1.add(new Integer(4));
        list1.add(new Integer
(3)); list1.add(new Integer(5)); list2.add(new Integer(5)); list2.add(new Integer(6)); list2.add(new Integer(7)); list2.add(new Integer(8)); list1.removeAll(list2); list1.addAll(list2); System.out.println(list1);

輸出結果:
[4, 3, 5, 6, 7, 8]
2.List中是關聯物件
由於判斷物件是否相等,需要在物件的實體類中覆寫equals方法,比較麻煩,可以使用map來進行去重。
實體類:

public class Vote{
    private static final long serialVersionUID = 1L;    

    private String voteId;//   
    private Integer voteType;//  投票型別 
    private String voteSubject;//   投票主題

    getter setter 方法
}
List<Vote> list1 = new ArrayList<>();
List<Vote> list2 = new ArrayList<>
(); list1.add(若干vote物件); list2.add(若干vote物件); //以voteId為key,vote物件為value儲存到map中,由於key不可重複,所以可以達到去重的效果 Map<String,Vote> map = new HashMap<>(); for (Vote vote : list1) { if(vote!=null){ map.put(vote.getVoteId(), vote); } } for (Vote vote : list2) { if(vote!=null){ map.put(vote.getVoteId(), vote); } } //遍歷map,將map中的vote新增到list中 List<Vote> combineResult = new ArrayList<>(); Set<Entry<String, Vote>> entryset = map.entrySet(); Iterator<Entry<String, Vote>> iter = entryset.iterator(); while (iter.hasNext()) { combineResult.add(iter.next().getValue()); }

二 List中物件按照某一屬性排序
直接呼叫方法:

Collections.sort(combineResult, new Comparator<Vote>(){
    @Override
    public int compare(Vote v1, Vote v2) {
        return v1.getVoteEndTime().compareTo(v2.getVoteEndTime());
    }
});

將需要排序的屬性轉換為long型別的資料,在compare方法中進行比較,如果想升序排列,則v1.屬性.compareTo(v2.屬性);降序排列,則v2.屬性.compareTo(v1.屬性)。
Collections.sort方法,最終呼叫的還是Arrays中的mergeSort方法,在這個方法中進行了一個氣泡排序。