我有一个父
对象的集合,每个对象都有一个子
元素的集合,例如:
public class Parent {
private Collection<Child> children;
}
public class Child {
private String type;
}
如何使用Java 8函数式编程来过滤和收集类型等于“a”的Child
集合?
我尝试了以下方法:
Collection<Child> filteredChildren = parents.stream()
.forEach(p ->
filteredChildren.addAll(p.getChildren().stream()
.filter(c -> c.getType().equals("A"))
.collect(Collectors.toList()))
);
但我得到以下错误:
变量'filteredChildren'初始值设定项'parents。stream()。forEach(p-
如何按类型筛选嵌套集合并收集它们?
你可以做的是在parents集合中进行流式处理,将他们的孩子平铺,并过滤那些类型
等于“A”
的孩子。
parents.stream()
.map(Parent::getChildren)
.flatMap(Collection::stream)
.filter(children -> "A".equals(children.getType()))
.collect(Collectors.toList());
在终端Stream
操作的代码中使用foreach
是错误的,因为它不产生输出,所以您不能将其分配给filteredCRC
变量。
使用flatMap
获取所有父实例的
子实例(按类型过滤)的平面
流,然后收集到
列表
:
Collection<Child> filteredChildren =
parents.stream()
.flatMap(p -> p.getChildren()
.stream()
.filter(c -> c.getType().equals("A")))
.collect(Collectors.toList());
有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建地图。我想知道是否有一种方法可以用一条流来实现这一点。 像这样的
如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(
我试图理解新的Java8流,并且花了好几天的时间在Java8流中的集合上传输嵌套的foreach循环。 是否可以重构以下嵌套的foreach循环,包括Java-8-Streams中的if条件? 如果是,它会是什么样子。 非常感谢你的帮助。 溴
2020-07-08->{0->{hourquarter.first->5.5,ehourquarter.second->10.2,...},1->{ehourquarter.first->33.2,ehourquarter.second->30.1,...},...} 它是一个整数图(小时:从0到23)的局部日期图,二倍的每小时四分之一图。 我需要得到一个包含每个日期累加的map >,这意味着如
设备类型.java DeviceTelemetry.java (枚举类) 我想获取所有DeviceType Id,它们的DeviceTelem计名称以“System”(String)开头。 我做了这样的事情:— 谁能告诉我如何从中获取DeviceType Id?
假设我有一个,还有一个,它匹配我想从中删除的元素。但我不只是想丢弃它们,我想将匹配的元素移动到一个新集合中。在Java 7中,我会这样做: 我很好奇是否有一个流/Java8方法来做这件事。不幸地只是返回一个(甚至没有删除元素的数量?太糟糕了。)我设想了这样的东西(当然不存在): 注:此问题受类似问题启发;这个问题是关于在从集合中移除的项上获取流的更一般的情况。正如链接问题中所指出的,命令式解决方案