简体   繁体   中英

Set of String with Stream to HashMap in Java 8

How do I create HashMap of String and List of String out of Set of String with Stream?

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?

Thank you.

You don't need the map() step. The logic that produces a List<String> from a String should be passed to Collectors.toMap() :

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

The map operation is useless here, because you don't want to change the string itself, or you would have to map it to an Entry<String, List<String>> and then collect them, but this is not easier.

Instead just build the map, the string as key and get your codes as values :

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

If you want to know, how it would be with a map operation and use Entry (a pair) :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM