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

2024-04-03

我有一个流,我想根据匹配的 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(使用前将#替换为@)

Java 8 流比较两个对象并在它们上运行函数 的相关文章

随机推荐