我想要根据匹配的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做到这一点?
伪:
big.getParts().stream.
//dividing logic logic
for(i < parts.size)
abc(p)
由于
答案 0 :(得分:1)
您可以使用以下内容:
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))...
<强>更新强>
我们可以省略Collectors.mapping(Function.identity(),Collectors.toList())
部分,因为它是groupingBy
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId
)
);