2016-03-08 74 views
2

我有一個HashMap,看起來是這樣的:我如何可以使用Java 8流從我的HashMap中獲得價值

Map<String, ImageRecipeMap> contentIdToImageIdsMap = new HashMap<>(); 

我ImageRecipeMap物體看起來是這樣的:

public class ImageRecipeMap { 

    private ContentType contentType; 

    private List<String> imageIds; 

    public List<String> getImageIds() { 
     return imageIds; 
    } 

    public void setImageIds(List<String> imageIds) { 
     this.imageIds = imageIds; 
    } 

    ... 
} 

我想抓取所有的imageIds列表,並使用java8流創建一個完整的imageIds列表。這是我到目前爲止,但我似乎對我收集了編譯錯誤:

List<String> total = contentIdToImageIdsMap.values().stream() 
      .map(value -> value.getImageIds()) 
      .collect(Collectors.toList()); 
+0

我得到的編譯錯誤是收集流不能應用 – DanielD

回答

4

您的解決方案返回List<List<String>>。使用.flatMap()這樣扁平化它們。

List<String> total = contentIdToImageIdsMap.values().stream() 
      .flatMap(value -> value.getImageIds().stream()) 
      .collect(Collectors.toList()); 

.flatMap()改變Stream<List<String>>Stream<String>

+0

是的,這看起來像它的伎倆。你能解釋一下flatMap和map之間的區別是什麼?爲什麼我的ID會轉換成另一個流?謝謝 – DanielD

+3

getImageIds()。stream()將爲您的地圖中的每個元素創建一個Stream 對象。使用地圖,您將擁有一個Stream >或一個由strings_流組成的_stream。 flatMap將把所有的字符串串流成一個單一的流並給你一個簡單的流 superbob

+0

@superbob謝謝! – saka1029