【发布时间】:2018-02-25 16:47:56
【问题描述】:
我有一个像这样的“,”分隔的字符串数组
a b c d,
f b h j,
l p o i,
我希望将其转换为类似的 Hashmap
HashMap<String, List<String>> 使得列表中的第二个元素(由空格分隔成为键,第三个元素成为值)
所以,
这应该变成
b -> c,h
p -> o
我想使用 Streams API,我认为这是要走的路:
List<String> entries = new ArrayList<>();
HashMap<String, List<String>> map = new HashMap<>();
HashMap<String, List<String>> newMap = entries.stream()
.collect(line -> {
if (map.contains(line.split(" ")[1])) {
// Get existing list and add the element
map.get(line.split(" ")[1].add(line.split(" ")[1]));
} else {
// Create a new list and add
List<String> values = new ArrayList<>();
values.add(line.split(" ")[1]);
map.put(line.split(" ")[0], values);
}
});
有没有更好的方法?我应该如何从 collect 函数返回 Hashmap?
【问题讨论】:
-
有没有更好的方法? 鉴于您的代码无法编译,是的,有更好的方法。如果您的问题确实是这样,请尝试至少发布可以按预期编译和工作并且格式正确的代码。
-
元素是包含在列表还是数组中?
-
如果你真的想了解,首先从阅读文档中的Collector的原理开始(实际上阅读docs.oracle.com/javase/8/docs/api/java/util/stream/…中的所有内容)。然后阅读 Arrays.stream()、Collectors.groupingBy()、Collectors.mapping() 和 Collectors.toList() 的文档。这些是您需要使用的部分。
-
@Aominè : 元素包含在列表中。
-
@JBNizet:修改了代码。我已阅读,但我不确定如何处理。任何帮助将不胜感激!
标签: java collections hashmap java-stream