//根据users的name以及age去重
List<Users> uniq = objects.stream()
.filter(CommonUtils.distinctByKey(s -> StringUtils.join(s.getName(), "-", s.getAge())))
.collect(Collectors.toList());
/**
* 函数式接口 LIST Object 属性去重;原理 使用了map.putIfAbsent方法的特性如果key不存在 设置成功并且返回上一次的值(上次一的为null) 如果key已经存在了;设置失败并且返回上一次的值(上一次的为true) ;返回true!=null fliter之后会过滤掉
*
* @param keyExtractor
* @param <T>
*
* @return
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(16);
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
java stream list对象根据自定义方式去重
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 自定义序列器,使用@JsonSerialize(using = 自定义序列化器类.class)去序列化指定的属性[...
- 随机改变activity整个页面背景颜色 1,要获取整个activity的布局,先在布局文件里给定一个id----...
- 上一篇说到自定义导航栏,若自定义的导航栏中设置了属性translucent = NO(作用是去掉颜色渲染,若为YE...