1. 代码部分
// 根据指定的key去重
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;
}
2. 具体应用
效果:根据指定key去重、并倒序输出
messageReminds = messageReminds.stream()
.filter(distinctByKey(MessageRemind::getMessageId)) // 根据消息id进行去重
.sorted(Comparator.comparingLong(MessageRemind::getMessageId).reversed()) // 倒序输出
.collect(Collectors.toList());