我有一个包含多个条目的LinkedHashMap。我想在第一步中将多个条目减少为单个条目,然后将其映射到单个String。 例如: 我从这样的地图开始:
{"<a>"="</a>", "<b>"="</b>", "<c>"="</c>", "<d>"="</d>"}
最后我想得到一个像这样的字符串:
<a><b><c><d></d></c></b></a>
(在这种情况下,String按顺序包含键,而不是相反顺序的值。但这并不重要,我想要一个通用的解决方案)
我想我需要map.entrySet()。stream()。reduce(),但我不知道在reduce方法中写什么,以及如何继续。
答案 0 :(得分:4)
由于您通过将键与键和值连接起来来减少条目,因此您要查找的标识是一个条目,其中包含键和值的空字符串。
String reduceEntries(LinkedHashMap<String, String> map) {
Entry<String, String> entry =
map.entrySet()
.stream()
.reduce(
new SimpleImmutableEntry<>("", ""),
(left, right) ->
new SimpleImmutableEntry<>(
left.getKey() + right.getKey(),
right.getValue() + left.getValue()
)
);
return entry.getKey() + entry.getValue();
}
Java 9添加了一个静态方法Map.entry(key, value)
,用于创建不可变条目。
答案 1 :(得分:0)
这是一个关于我将如何做的例子:
import java.util.LinkedHashMap;
public class Main {
static String result = "";
public static void main(String [] args)
{
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
map.put("<a>", "</a>");
map.put("<b>", "</b>");
map.put("<c>", "</c>");
map.put("<d>", "</d>");
map.keySet().forEach(s -> result += s);
map.values().forEach(s -> result += s);
System.out.println(result);
}
}
注意:您可以使用ArrayUtils.reverse()
来反转values()以获得d