Java 8 流 for 循环

2023-12-29

我是 Java 8 Streams 的新手,希望将以下代码块转换为 Java 8 的 Stream 方式来做同样的事情。

Edit:更新类名以减少混乱。 (删除了 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());

Edit :

Since objects.get(1).getObjects()似乎返回一个List<Object>,需要演员阵容。为了安全起见,您还可以添加一个过滤器来确保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());

EDIT :

这是带有已编辑问题的类名的答案:

List<PriceList> priceLists = 
    distObjects.stream()
               .flatMap (g -> g.getAffiliates().stream())
               .map(Affiliate::getPriceList)
               .collect(Collectors.toList());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 流 for 循环 的相关文章

随机推荐