我打印一个按键排序的地图,中间对象为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())));
如何在收集之前直接从流中打印?
答案 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
终端操作并打印数据。