收集要使用Java 8 Stream API映射的字符串列表

时间:2017-03-27 15:50:48

标签: java-8 java-stream

有人可以建议我如何将["bla", "blabla", "blablabla"]之类的列表转换为像{"bla" : 3, "blabla" : 6, "blablabla" : 9}这样的地图,其中单词代表键,值代表单词长度?

我做的事情如下:

Map<String, Integer> map =  list.stream().collect(Collectors.groupingBy(Function.identity(), String::length));

但没有运气。

谢谢!

2 个答案:

答案 0 :(得分:6)

groupingBy几乎正确,但第二个参数是Collector,而不是Function。因此我使用了toMap

 Map<String, Integer> map = Stream.of("bla", "blabla", "blablabla").distinct()
            .collect(Collectors.toMap(Function.identity(), String::length));

答案 1 :(得分:0)

你不必做那么复杂的事情。 这是一个示例代码:

...
... 

List<String> ll= // the list of words that you have.
Map<String,Integer> map = new HashMap<>();// or any other kind of map you want to create

for(String s:ll){
    map.put(s,s.length());
}

现在您的map符合您的要求。