You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream先按键排序Map再排序对应值并输出结果

Java Stream实现Map按键+值列表排序并合并序列

完整实现代码

import java.util.*;
import java.util.stream.Collectors;

public class MapSortMergeDemo {
    public static void main(String[] args) {
        // 初始化测试用的Map
        Map<String, List<String>> myMap = new HashMap<>();
        myMap.put("Apple", Arrays.asList("iphone", "imac"));
        myMap.put("Samsung", Arrays.asList("galaxyz", "galaxys"));
        myMap.put("LG", Arrays.asList("ultra", "tab"));

        // 核心逻辑:排序键→排序值列表→合并元素
        List<String> sortedSequence = myMap.entrySet()
                // 第一步:按键的自然字典序排序(Apple → LG → Samsung)
                .stream()
                .sorted(Map.Entry.comparingByKey())
                // 第二步:对每个键的列表排序,再展开为单个元素流
                .flatMap(entry -> entry.getValue().stream().sorted())
                // 第三步:收集为有序列表
                .collect(Collectors.toList());

        // 输出要求格式的结果
        System.out.println(String.join(", ", sortedSequence));
        // 输出结果:imac, iphone, tab, ultra, galaxys, galaxyz
    }
}

关键步骤说明

  • 按键排序:Map.Entry.comparingByKey()提供了默认的自然字典序比较器,直接满足Apple、LG、Samsung的排序要求。如果需要自定义键的排序规则,可以传入自定义Comparator,比如Comparator.reverseOrder()实现倒序。
  • 值列表排序与展开:flatMap操作负责将每个键对应的列表流“扁平化”为单个元素流,同时在转换时对列表元素调用sorted()做自然排序,确保每个列表内部元素有序。
  • 结果收集与格式化:通过Collectors.toList()合并所有元素为有序列表,最后用String.join()拼接成要求的逗号分隔格式。

内容的提问来源于stack exchange,提问作者DarkCrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:24:56