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

本文介绍了如何使用Java对有效优惠券列表进行排序,首先按照endTime正序,然后startTime倒序,最后通过distinctByKey确保活动ID唯一。方法适用于灵活调整排序需求并保持数据一致性。
    /**
     * 按照①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` 接口提供了获集合的方法,可以直接提所有键并将其存储到一个新的集合中。由于 `Map` 的键本身是唯一的,因此提出的键天然具有特性。 可以通过 `Map.keySet()` 方法获所有键的集合,然后将其存入一个新的 `Set` 或 `List` 中。以下是一个示例代码: ```java import java.util.*; public class ExtractKeysFromMap { public static void main(String[] args) { // 创建一个 Map 并添加元素 Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); map.put("apple", 4); // 复的键会被覆盖 // 提所有 key 并存入新的 Set 集合中(自动) Set<String> uniqueKeysSet = new HashSet<>(map.keySet()); System.out.println("Unique keys in Set: " + uniqueKeysSet); // 提所有 key 并存入新的 List 集合中(如果需要保留顺序) List<String> keysList = new ArrayList<>(map.keySet()); System.out.println("Keys in List: " + keysList); } } ``` ### 说明: - `map.keySet()` 返回的是一个包含所有键的集合,类型为 `Set<K>`。 - 由于 `Set` 本身不允许复元素,因此直接将其赋值给 `Set` 即可实现[^1]。 - 如果需要保留键的插入顺序,可以使用 `LinkedHashSet` 或 `ArrayList` 来存储键。 ### 使用 `LinkedHashSet` 保留插入顺序: ```java Set<String> orderedKeys = new LinkedHashSet<>(map.keySet()); System.out.println("Ordered keys: " + orderedKeys); ``` ### 使用 `TreeSet` 对键进行排序: ```java Set<String> sortedKeys = new TreeSet<>(map.keySet()); System.out.println("Sorted keys: " + sortedKeys); ``` 通过上述方法,可以灵活地从 `Map` 中提键并根据需求存储到不同的集合类型中。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Octopus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值