Java 8中带有流到HashMap的流的字符串集

时间:2018-07-11 12:28:11

标签: java java-8 hashmap set java-stream

如何使用Stream从字符串集中创建字符串的HashMap和字符串列表?

Set<String> mySet;
Map<String, List<String>> = mySet.stream().map(string -> {
   // string will be my key
   // I have here codes that return List<String>
   // what to return here?
}).collect(Collectors.toMap(.....)); // what codes needed here?

谢谢。

2 个答案:

答案 0 :(得分:4)

您不需要执行map()步骤。从List<String>产生String的逻辑应该传递给Collectors.toMap()

Map<String, List<String>> map = 
    mySet.stream()
         .collect(Collectors.toMap(Function.identity(),
                                   string -> {
                                       // put logic that returns List<String> here
                                   }));

答案 1 :(得分:1)

map操作在这里没有用,因为您不想更改字符串本身,或者必须将其map更改为Entry<String, List<String>>然后收集它们,但是这并不容易。

相反,仅构建映射,将字符串作为键,然后将codes作为值即可:

Map<String, List<String>> map = 
        mySet.stream().collect(Collectors.toMap(str->str, str-> getCodesFromStr(str));

如果您想知道,map操作会如何,并使用Entry(一对):

Map<String, List<String>> = mySet.stream().map(str-> 
    new AbstractMap.SimpleEntry<String,List<String>>(str, getCodesFromStr(str))
).collect(Collectors.toMap(Entry::getKey, Entry::getValue));