//对象
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
static class A {
String name;
Integer age;
}
ArrayList<A> objects = Lists.newArrayList();
objects.add(A.builder().name("1").age(1).build());
objects.add(A.builder().name("1").age(2).build());
objects.add(A.builder().name("2").age(1).build());
1.利用 TreeSet 的排序去重构造函数来达到去重元素的目的
objects.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(A::getName))), ArrayList::new));
2.list根据值去重,自定义去重规则
//去重规则, 不覆盖新对象
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
//去重
objects.stream().filter(distinctByKey(A::getName)).collect(Collectors.toList());