簡體   English   中英

Java 8流for循環

[英]Java 8 stream for-loop

我是Java 8 Streams的新手,並希望將以下代碼塊轉換為Java 8的Stream方式來做同樣的事情。

編輯 :更新類名稱以減少混淆。 (刪除了Foo,Bar,Baz ...)

ArrayList<PriceList> priceLists = new ArrayList<PriceList>();

// I'm casting to a type-safe List from getObjects() 
// -which is a function I dont have access to. Is there a nice 
// solution to embed this in the stream-syntax?
List<PriceListGroup> distObjects = (List<PriceListGroup>) objects.get(1).getObjects();

for(PriceListGroup group : distObjects) {
    Set<Affiliate> affiliates = group.getAffiliates();
    for(Affiliate affiliate : affiliates) {
        priceLists.add(affiliate.getPriceList());
    }
}

所有幫助和解釋表示贊賞

你可以用flatMap做到這一點:

List<FooBO> list1 = objects.get(1).getObjects().stream()
                                  .flatMap (b -> b.getAffiliates().stream())
                                  .map(BazBo::getPriceList)
                                  .collect(Collectors.toList());

編輯:

由於objects.get(1).getObjects()似乎返回List<Object> ,因此需要objects.get(1).getObjects() 為了安全起見,您還可以添加一個過濾器,以確保在BarBO之前Object的類型確實是BarBO

List<FooBO> list1 = objects.get(1).getObjects().stream()
                                  .filter (o -> (o instanceof BarBo))
                                  .map (o -> (BarBO)o)
                                  .flatMap (b -> b.getAffiliates().stream())
                                  .map(BazBo::getPriceList)
                                  .collect(Collectors.toList());

編輯:

以下是已編輯問題的類名的答案:

List<PriceList> priceLists = 
    distObjects.stream()
               .flatMap (g -> g.getAffiliates().stream())
               .map(Affiliate::getPriceList)
               .collect(Collectors.toList());

考慮你的類(在你提供的示例中並假設它至少編譯),我真的不明白為什么flatMap兩次不起作用:

 List<BarBO> input = new ArrayList<>();

    List<FooBO> result = input.stream()
            .flatMap((BarBO token) -> {
                return token.getAffiliats().stream();
            })
            .flatMap((BazBO token) -> {
                return token.getPriceList().stream();
            })
            .collect(Collectors.toList());

暫無
暫無

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

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