如何使用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
相关产品推荐
相关产品推荐

