簡體   English   中英

使用lambdas獲取對象列表的hashmap值

[英]Getting the hashmap values of an object list using lambdas

讓我們假設我有一個對象:

class MyObject {
    private int id;
    private HashMap<Integer, OtherObject> otherObjects;
}

我想要做的是訪問MyObject列表的otherObjects屬性,並將它們全部添加到otherObjects list

我可以將.forEach.addAll用於otherObjects list但我正在嘗試查看是否可以使用lambdas來實現此目的。 我想到了類似的東西,但它似乎不起作用:

myObjectList.stream()
    .map(o -> o.getOtherObjects())
    .map(oo -> oo.values())
    .collect(Collectors.toList());

但似乎與對象類型存在沖突。 我猜這是因為我從一個對象流開始,最后得到一個列表流,它會混淆。 我怎樣才能做到這一點? 更一般地說,如何將許多父對象的對象列表收集到一個列表中?

使用flatMap修復簽名不匹配。 也喜歡方法參考和Haskell程序員贏得積分:)

myObjectList.stream()
            .map(MyObject::getOtherObjects)
            .map(Map::values)
            .flatMap(Collection::stream)
            .collect(Collectors.toList());

你可以試試flatMap:

myObjectList.stream()
            .flatMap(o -> o.getOtherObjects().values().stream())
            .collect(Collectors.toList());

使用flatMap方法而不是最后一次map調用。 flatmap方法將給定函數返回的流連接成一個流。 像這樣:

myObjectList.stream()
    .map(o -> o.getOtherObjects())
    .flatMap(oo -> oo.values().stream())
    .collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM