一、集合泛型为基本包装类
初始物料数据
List<String> list = new ArrayList<>();
list.add("all");
list.add("dfg");
list.add("bnm");
list.add("cff");
list.add("uii");
list.add("uii");
1. 转Set
作用: 去重
System.out.println(list);
Set<String> set = new HashSet<>(list);
System.out.println(set);
结果:
[all, dfg, bnm, cff, uii, uii]
[all, bnm, cff, dfg, uii]
2. 转TreeSet
作用: 排序去重
System.out.println(list);
Set<String> tree = new TreeSet<>(list);
System.out.println(tree);
结果:
[all, dfg, bnm, cff, uii, uii]
[all, bnm, cff, dfg, uii]
3. Java8 stream
作用: 排序去重
System.out.println(list);
List<String> collect = list
.stream() // 得到流
.distinct() // 去重
.sorted() // 自然排序
.collect(Collectors.toList());//收集并返回
System.out.println(collect);
结果:
[all, dfg, bnm, cff, uii, uii]
[all, bnm, cff, dfg, uii]
二、集合泛型为POJO类
1. 根据对象中某一属性筛选去重
根据AddMonitorGetWbsVO
对象中的wbsId
属性去重
方法1:
public List<AddMonitorGetWbsVO> getWbsProject(AddMonitorGetWbsDTO dto) {
List<AddMonitorGetWbsVO> monitorWbsProject = riskSourcesMapper.getMonitorWbsProject(dto);
return monitorWbsProject.stream().collect(
collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(AddMonitorGetWbsVO::getWbsId))), ArrayList::new));
}
方法2:
public List<AddMonitorGetWbsVO> getWbsProject(AddMonitorGetWbsDTO dto) {
List<AddMonitorGetWbsVO> monitorWbsProject = riskSourcesMapper.getMonitorWbsProject(dto);
return monitorWbsProject.stream()
.filter(distinctByKey(AddMonitorGetWbsVO::getWbsId)).collect(Collectors.toList());
}
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}