因此,我希望在泛型类列表中交叉匹配数据,检查姓名和姓氏是否匹配,如果存在匹配,则返回数据或返回布尔值。这就是我想出来的
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和SETTER通过设置布尔值从lambda表达式返回布尔值。
所以我正在寻找最简单的lambda表达式来实现这一点?有没有人在外面。
发布于 2020-02-04 14:18:59
您可以使用filter:
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)
。
发布于 2021-01-21 12:06:55
使用Predicate
的两个短路anyMatch
调用的嵌套流如何
boolean test = list.stream()
.map(FirstObject::getLastName)
.anyMatch(y -> list2.stream()
.map(SecondObject::getStuName)
.anyMatch(x -> x.equals(y)));
test2.setBool(test);
https://stackoverflow.com/questions/60059148
复制相似问题