我有一个流,我想根据匹配的 Id 将其分成更小的部分,然后对每个部分/元素应用一些处理逻辑。
class BigRequest{
String bId;
List<Parts> parts;
//getters and setter here
}
Class Parts{
String pId;
String partId;
//getters and setter here
}
当不同零件的partId相同时,我想隔离并创建一个大小为10的零件列表。
如何使用filter或reduce或groupingBy函数来比较两个元素并将它们放入列表中?
我尝试过如下过滤器,不采用 p1 变量:
big.stream().filter( p -> p.getPartId() == p1.getPartId()) //error
尝试像这样分组
big.stream().collect(Collectors.groupingBy(Parts::getPartId) //error
我想迭代另一个过滤/缩减列表并调用另一个名为 abc() 的函数。我如何使用 Java Streams 来做到这一点?
pseudo:
big.getParts().stream.
//dividing logic logic
for(i < parts.size)
abc(p)
Thanks
你可能会使用这样的东西:
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId,
Collectors.mapping(
Function.identity(),
Collectors.toList()
)
)
);
之后,您只需要迭代地图并应用您的函数即可。commonId.entrySet().stream().map(entry -> apply(entry))...
Updated我们可以省略Collectors.mapping(Function.identity(),Collectors.toList())
部分,因为这是默认行为分组依据 https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId
)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)