java Map集合排序再排序后顺序去重(只取最前面的唯一)

本文介绍了如何使用Java对有效优惠券列表进行排序,首先按照endTime正序,然后startTime倒序,最后通过distinctByKey确保活动ID唯一。方法适用于灵活调整排序需求并保持数据一致性。
摘要由CSDN通过智能技术生成
    /**
     * 按照①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));
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值