2017-03-18 75 views
1

我有這樣一個類:轉換列表和字符串列表與Java流於地圖

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

我的這些對象,像這樣的列表:

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

我想CONVER這到Map<String, String>,其中stringList中的每個字符串都映射到相同的someString值(如multimap)。我怎樣才能使用java 8流來做到這一點?

我可以將此轉換爲平面地圖,像這樣:

list.stream.flatMap(.... 

但我不知道從哪裏裏去。

回答

3

試試這個。

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

這就是我要找的,但我得到了'的Map.Entry :: getKey'說:「非靜態方法不能從靜態context' – Richard

+1

引用我已經改變了我的答案錯誤。 – saka1029

+0

@ sake1029完美! – Richard

0

已回答herehere。基本上,你將創建一個hashmap到你的列表中,如果你的列表很大,你應該避免這樣做。

0

我希望這有助於。

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)); 
相關問題