列表对象去重复
一、distinct 去重
栗子:
[
{
"menuId": 1,
"menuName": "菜单",
},
{
"menuId": 1,
"menuName": "菜单",
}
]
menus = menus.stream().distinct().collect(Collectors.toList());
[
{
"menuId": 1,
"menuName": "菜单",
}
]
二、filter 去重
栗子:
[
{
"menuId": 1,
"menuName": "菜单",
},
{
"menuId": 2,
"menuName": "菜单",
}
]
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
menus = menus.stream().filter(distinctByKey(Menu::getMenuName)).collect(Collectors.toList());
[
{
"menuId": 1,
"menuName": "菜单",
}
]