📜  java 8 anymatch 两个列表 - Java (1)

📅  最后修改于: 2023-12-03 15:15:54.734000             🧑  作者: Mango

Java 8 anyMatch 两个列表

在Java 8中,我们可以使用anyMatch方法来检查一个列表中是否存在符合给定条件的元素。我们通常使用Lambda表达式来表示条件。

boolean anyMatch(Predicate<? super T> predicate)

任何元素匹配给定的谓词,如果流中存在,则返回true。否则返回false。

但是,如果我们有两个列表,并且想检查它们是否存在相同的元素,我们该如何做呢?这就是本文要解决的问题。

方法一:使用两个for循环

使用两个for循环可以遍历两个列表中的每个元素,并将其比较,如果找到相同的元素,则返回true。否则返回false。

List<String> list1 = Arrays.asList("Java", "C++", "Python", "Ruby");
List<String> list2 = Arrays.asList("C#", "Java", "PHP", "Python");

boolean isExists = false;

for(String s1 : list1) {
    for(String s2 : list2) {
        if(s1.equals(s2)) {
            isExists = true;
            break;
        }
    }
}

if(isExists) {
    System.out.println("有匹配的元素");
} else {
    System.out.println("没有匹配的元素");
}

该代码段的输出为:“有匹配的元素”。

方法二:使用Java 8的anyMatch方法

Java 8的任何匹配方法可以轻松找到两个列表中的任何匹配项。

List<String> list1 = Arrays.asList("Java", "C++", "Python", "Ruby");
List<String> list2 = Arrays.asList("C#", "Java", "PHP", "Python");

boolean isExists = list1.stream()
                          .anyMatch(list2::contains);
if(isExists) {
    System.out.println("有匹配的元素");
} else {
    System.out.println("没有匹配的元素");
}

输出与方法一相同:“有匹配的元素”。

在这里,我们使用list1stream()方法将其转换为流。接下来,我们使用anyMatch方法来检查list2中是否包含与list1中的任何元素匹配的元素。这里提到一个新的概念,即方法引用。在本例中,我们使用list2 :: contains表示对list2列表的contains方法的引用。这是Java 8中新添加的功能之一,可以使代码更加简洁和可读。

总结

使用Java 8的anyMatch方法可以更轻松地检查两个列表中是否存在匹配的元素,而无需使用任意数量的for循环。在代码的可读性和清晰度方面也有很大的提高。现在,我们可以更加自信地解决类似的问题了!