【发布时间】:2017-09-27 20:50:23
【问题描述】:
我有一个包含多个条目的 LinkedHashMap。我想在第一步中将多个条目减少为单个条目,然后将其映射到单个字符串。 例如: 我从这样的地图开始:
{"<a>"="</a>", "<b>"="</b>", "<c>"="</c>", "<d>"="</d>"}
最后我想得到一个这样的字符串:
<a><b><c><d></d></c></b></a>
(在这种情况下,字符串按顺序包含键,而不是按相反顺序包含值。但这并不重要,我想要一个通用的解决方案)
我想我需要map.entrySet().stream().reduce(),但是我不知道在reduce方法中要写什么,以及如何继续。
【问题讨论】:
-
不清楚您所说的“将多个条目减少为一个”是什么意思。一个什么?一个入口?通用解决方案是什么意思?
-
我想用一个函数将多个条目减少为一个条目。 reduce() 方法使用 BinaryOperator。在我的示例中,此 BinaryOperator 获取两个条目,连接两个键,并“反向连接”两个值。但我不知道如何实现它。 reduce() 也需要一个标识元素
-
中间缩减条目的存在真的是一个要求吗?这与“我想要一个通用解决方案”的说法相矛盾。例如。你可以简单地使用
String result = String.join("", map.keySet())+map.values().stream().reduce("", (a,b)->b+a);。如果您坚持使用单个Stream操作,则可以使用String result = Stream.concat(map.keySet().stream(), map.values().stream().collect(ArrayDeque<String>::new, ArrayDeque::addFirst, (a,b) -> b.descendingIterator().forEachRemaining(a::addFirst)).stream()) .collect(Collectors.joining());而无需构造Map.Entry实例。 -
我没有考虑过 String.join 解决方案。第二种解决方案对我来说很难,我只是在学习流 API。但我非常喜欢它,所以我希望我能越来越了解它。不,不需要中间条目。
标签: java-8 java-stream