2017-03-18 1 views
1

J'ai une classe comme ceci:Conversion Liste des Liste et chaîne à la carte avec Java flux

public class A { 
    private List<String> stringList; 
    private String someString; 
} 

J'ai une liste de ces objets comme ceci:

List<A> list = //some method to generate list 

Je veux conver ce à Map<String, String> où chaque chaîne dans le stringList correspond à la même valeur someString (comme un multimap). Comment puis-je faire cela en utilisant java 8 stream?

je pourrais convertir en une carte plane comme ceci:

list.stream.flatMap(.... 

Mais je ne sais pas où aller à partir de là.

Répondre

3

Essayez ceci.

Map<String, String> r = list.stream() 
    .flatMap(a -> a.stringList.stream() 
     .map(k -> new AbstractMap.SimpleEntry<>(k, a.someString))) 
    .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())); 
+0

c'est ce que je cherche, mais je reçois une erreur pour 'Map.Entry :: getKey' disant « méthode non statique ne peut pas être référencé à partir d'un context' statique – Richard

+1

j'ai changé ma réponse. – saka1029

+0

@ sake1029 parfait! – Richard

0

Il a été répondu here ou here. Fondamentalement, vous allez créer une hashmap à votre liste, vous devriez éviter de le faire si votre liste est grande.

0

J'espère que cela aide.

List<String> fruits = Arrays.asList("Apple", "Orange", "Grape"); 
Map<String, String> myMap = fruits.stream().collect(Collectors.toMap(String::toString, String::toString)); 
myMap.forEach((k,v)->System.out.println("key : " + k + " value : " + v));