/**
* 按照①endTime正序②startTime倒序③随机 进行排序
* @param effectiveCoupon
* @return
*/
private List<Map<String, Object>> listSort(List<Map<String, Object>> effectiveCoupon) {
List<Map<String, Object>> newList = effectiveCoupon.stream().sorted(
Comparator.comparing((Map<String, Object> item) -> (String) (item.get("endTime")))
.thenComparing((Map<String, Object> item) -> (String) (item.get("startTime")), Comparator.reverseOrder())
).filter(distinctByKey(item -> item.get("activityId"))).collect(Collectors.toList());
log.debug("---listSort.newList: {}", newList);
return newList;
}
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
java Map集合排序再排序后顺序去重(只取最前面的唯一)
最新推荐文章于 2023-11-03 06:45:00 发布
本文介绍了如何使用Java对有效优惠券列表进行排序,首先按照endTime正序,然后startTime倒序,最后通过distinctByKey确保活动ID唯一。方法适用于灵活调整排序需求并保持数据一致性。
摘要由CSDN通过智能技术生成