所以我要交叉匹配通用类列表中的数据,其中要检查匹配的名称与姓氏,如果存在匹配,则返回数据或返回 boolean 值。这就是我想出的
list.stream().forEach(x -> {
boolean test = list2.stream()
.anyMatch(tst -> tst.getLastName() == x.getStuName());
if (test) {
test2.setBool(test);
}
});
System.out.println("Match > " + test2.getBool());
这会返回 TRUE,因为我使用 GETTER AND SETTER 通过设置 boolean 从 lambda 表达式返回 boolean 值。
所以我正在寻找最简单的 lambda 表达式来执行此操作?请问那里有人吗?
最佳答案
您可以使用过滤器:
long count = list.stream().filter(e -> e.equals(someString)).count();
但是这是在O(n)
内完成的。有更好的方法...代替普通列表,使用 Set
,因此将 List
转换为 Set
并检查它是否存在:
Set set = new HashSet(list);
if (set.contains(someString)) return true;
如果您在进行任何检查之前转换列表一次并稍后使用该集合,则检查它是否包含的时间为 O(1)
。取决于你如何获得第一名的名单?程序开始时有列表吗?然后将其设置为类中的静态列表。稍后你明白了吗?它多久改变一次?即使是这种情况,也要确保其更新是分开的,这样您仍然会拥有 O(1)
。
关于java - Java 8 中的 ArrayList 交叉匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60059148/