gpt4 book ai didi

java - 谓词检查来自同一类的不同对象的属性是否相等

转载 作者:行者123 更新时间:2023-11-30 10:37:48 24 4
gpt4 key购买 nike

使用 Java 8 Streaming API,我想通过检查相同类型的示例对象的某些属性之间的相等性来过滤对象集合,例如

myFooCollection.stream().filter(foo -> foo.getBar().getBaz().equals(fooSampleObject.getBar().getBaz()));

由于我想应用多个具有相同结构但具有不同属性路径的过滤器,有没有办法以方便的方式完成此操作? (例如,使用自定义谓词,将属性路径作为参数?)

最佳答案

您可以创建一个 Predicate 来测试是否与 fooSampleObject 相等,方法是将它和 Function 传递给方法,方法如下:

private static <T,R> Predicate<T> getEqualsPredicate(T foo, Function<T, R> trFunction) {
R apply = trFunction.apply(foo);
Predicate<R> p = Predicate.isEqual(apply);
return z -> p.test(trFunction.apply(z));
}

那么你可以使用下面的方式:

List<Foo> result = myFooCollection.stream()
.filter(getEqualsPredicate(fooSampleObject, (Foo f) -> f.getBar().getBaz()))
.collect(Collectors.toList());

关于java - 谓词检查来自同一类的不同对象的属性是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com