Java 8 Java8流比较两个对象并在其上运行函数
我有一个流,我想根据匹配的Id将其划分为更小的部分,然后在每个部分/元素上应用一些处理逻辑Java 8 Java8流比较两个对象并在其上运行函数,java-8,java-stream,Java 8,Java Stream,我有一个流,我想根据匹配的Id将其划分为更小的部分,然后在每个部分/元素上应用一些处理逻辑 class BigRequest{ String bId; List<Parts> parts; //getters and setter here } Class Parts{ String pId; String partId; //getters and setter here } 试过这样分组吗 big.stream().collect(Collectors.groupingBy(
class BigRequest{
String bId;
List<Parts> parts;
//getters and setter here
}
Class Parts{
String pId;
String partId;
//getters and setter here
}
试过这样分组吗
big.stream().collect(Collectors.groupingBy(Parts::getPartId) //error
我想迭代过滤/缩减列表,调用另一个名为abc()的函数。我如何使用Java流来实现它
伪:
big.getParts().stream.
//dividing logic logic
for(i < parts.size)
abc(p)
big.getParts().stream。
//分割逻辑
用于(i<零件尺寸)
abc(p)
谢谢您可以使用以下内容:
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId,
Collectors.mapping(
Function.identity(),
Collectors.toList()
)
)
);
正常的
groupingBy
收集器已经映射(identity(),toList())
,不是吗?@M.Prokhorov,是的,你完全正确。我们不需要-Collectors.mapping(Function.identity(),Collectors.toList())
part@M.普罗霍罗夫:嗯,groupingBy
默认情况下使用toList()
,而映射(identity(),…)
更加冗余。@Holger,老实说,我一直在使用Collectors.mapping(Function.identity(),Collectors.toList())
,我从来没有听说过toList()
是groupingBy
的默认行为。真可惜!现在我将更仔细地阅读java文档。但是将收集器包装到映射(identity(),…)
收集器中的目的是什么呢?您的错误是因为您有一个BigRequest
列表,但您正在其上调用Parts::getPartId
,这与调用BigRequest.getPartId()
(不工作)。您必须flatMap(bigParts->bigParts.parts.stream())
然后它将允许您使用Parts::getPartId
。然而,通常不可能通过将流
收集到某种流
中来在流中产生背压-流是通过设计操作一次只对单个元素进行的。您可以将流
展开到流
,但是相反的是不适用于您。
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId,
Collectors.mapping(
Function.identity(),
Collectors.toList()
)
)
);
Map<String,List<Parts>> commonId = big.getParts().
stream().
collect(
Collectors.groupingBy(
Parts::getPartId
)
);