java 8 - 打印按键排序的地图

时间:2017-12-30 13:36:31

标签: java-8 java-stream

我打印一个按键排序的地图,中间对象为LinkedHashMap,如下所示;

 LinkedHashMap<String, AtomicInteger> sortedMap = wcMap.entrySet().stream()
            .sorted(Map.Entry.comparingByKey())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                    (oldValue, newValue) -> oldValue, LinkedHashMap::new));

 sortedMap.forEach((k, v) -> System.out.println(String.format("%s ==>> %d",k, v.get())));

如何在收集之前直接从流中打印?

2 个答案:

答案 0 :(得分:4)

如果您对收集的LinkedHashMap

不感兴趣
wcMap.entrySet().stream()
        .sorted(Map.Entry.comparingByKey())
        .forEachOrdered(e -> System.out.println(String.format("%s ==>> %d", e.getKey(), e.getValue().get()));

甚至更好:

wcMap.entrySet().stream()
        .sorted(Map.Entry.comparingByKey())
        .map(e -> String.format("%s ==>> %d", e.getKey(), e.getValue().get()))
        .forEachOrdered(System.out::println);

如果您仍想要结果LinkedHashMap,请使用peek()

wcMap.entrySet().stream()
        .sorted(Map.Entry.comparingByKey())
        .peek(e -> System.out.println(String.format("%s ==>> %d", e.getKey(), e.getValue().get())))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (oldValue, newValue) -> oldValue, LinkedHashMap::new));

答案 1 :(得分:1)

您可以使用peek中间操作来执行某个操作(主要是为了支持调试,您希望在流经管道中某个点时查看元素),然后{{1}或forEach,然后在您完成后应用collect

collect的示例:

forEach

此外,如果您只对打印数据感兴趣,则无需将结果转储到peek实例中,因为它不必要且可以避免。因此,您可以在LinkedHashMap<String, AtomicInteger> sortedMap = wcMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .peek(e -> System.out.println(String.format("%s ==>> %d", e.getKey(), e.getValue().get()))) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); 操作后链接Map终端操作并打印数据。