兩個List合併去重,並排序
阿新 • • 發佈:2018-12-25
一:去重
在工作中,我們經常需要對兩個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方法,在這個方法中進行了一個氣泡排序。