一:去重
在工作中,我们经常需要对两个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方法,在这个方法中进行了一个冒泡排序。