本文内容都是个人思索,并未找到官方文档,请大佬评论指正:
需求:对根据对象里面的特定字段,完成对象元素去重;
public class Test4 {
static List ans = Lists.newArrayList(new User(“a”),
new User(“a”), new User(“b”), new User(“c”));
/**
* 创建的是Predicate对象,而创建代码只会走一次,
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
System.out.println("--->创建seen:" + seen);
return t -> {
System.out.println("filter操作" + t);
return seen.add(keyExtractor.apply(t));
};
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class UserEx {
private String name;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class User {
private String name;
}
}
普通版
普通写法:在外部定义一个Set集合,然后利于set的add方法完成去