Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 Java8流比较两个对象并在其上运行函数_Java 8_Java Stream - Fatal编程技术网

Java 8 Java8流比较两个对象并在其上运行函数

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(

我有一个流,我想根据匹配的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(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
                            )
                    );