gpt4 book ai didi

java - 将 BiPredicate 作为函数参数传递

转载 作者:行者123 更新时间:2023-12-02 08:39:10 24 4
gpt4 key购买 nike

我已经关注了这个answer基于相同字段检查两个不同类型的列表是否相等。

这里是工作函数:

private <T, U> boolean compareLists(List<T> list1, List<U> list2, BiPredicate<T, U> predicate) {

return list1.size() == list2.size() &&
list1.stream().allMatch(itme1 -> list2.stream().anyMatch(item2 -> predicate.test(itme1, item2)));
}

但是当我这样调用它时

compareLists(list1, list2,
(item1, item2) ->
item1.someField11.equals(item1.someField21) && item1.someField12.equals(item1.someField22)
)

我得到无法解析符号“someField11”(其他字段相同)

我必须以下面的方式声明它才能使其工作

BiPredicate<Foo1, Foo2> biPredicate = (item1, item2) ->
item1.someField11.equals(item1.someField21) && item1.someField12.equals(item1.someField22)

那么如何让它在没有额外局部变量biPredicate的情况下工作?

  • 更新解决方案

list1Set 类型,而不是 List,因此我将函数签名更改为 Collection

最佳答案

看起来类型推断进展不顺利。您可以自己指定参数类型,如下所示:

compareLists(list1, list2,
(Foo1 item1, Foo2 item2) ->
item1.someField11.equals(item1.someField21) && item1.someField12.equals(item1.someField22)
)

关于java - 将 BiPredicate 作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61494706/

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