java - Java 8 中的 ArrayList 交叉匹配

标签 java filter foreach java-stream

所以我要交叉匹配通用类列表中的数据,其中要检查匹配的名称与姓氏,如果存在匹配,则返回数据或返回 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/

相关文章:

java - java中的字符串操作以获取另一个字符串

image - 具有单位积分的低通滤波器

java - 在 Java Filter 中获取方法名称

java - 为什么可以使用增强的 for 循环更改字段变量但不能初始化对象?

c# - Umbraco foreach children of a child page

java - 形式为: "for (A b : c)" in Java的for循环

java - 用于生成类图的 Eclipse 插件

java - 文件被删除而没有被复制

java - Spark Yarn Cluster 连接到 Hbase 错误

excel - 如何查找过滤后范围内的行数