gpt4 book ai didi

Java 8 流 for 循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:17 26 4
gpt4 key购买 nike

我是 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> ,需要类型转换。为了安全起见,您还可以添加一个过滤器来确保 Object 的类型。 s 确实是 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());

关于Java 8 流 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29342659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com