【发布时间】:2017-08-24 09:44:41
【问题描述】:
我有一个流,我想根据匹配的 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
这样尝试过groupingBy
big.stream().collect(Collectors.groupingBy(Parts::getPartId) //error
我想遍历另一个过滤/简化列表并调用另一个名为 abc() 的函数。如何使用 Java Streams 做到这一点?
伪:
big.getParts().stream.
//dividing logic logic
for(i < parts.size)
abc(p)
谢谢
【问题讨论】:
-
你的错误是因为你有一个
BigRequest的列表,但你在上面调用Parts::getPartId,这与调用BigRequest.getPartId()相同(不起作用)。你必须flatMap(bigParts -> bigParts.parts.stream())和然后它会允许你使用Parts::getPartId。 -
然而,通常不可能通过将
Stream<T>收集到某种Stream<List<T>>中来在流中创建背压 - 流是通过设计操作一次仅对单个元素进行的。您可以将Stream<List<T>>解包为Stream<T>,但您无法使用相反的方法。
标签: java-8 java-stream