我试图弄清楚如何在Java Lambda的单个过滤器上执行多个谓词,但是运气不好。

我有一个字符串列表

List<String> namesList = new ArrayList(){};
namesList.add("John");
namesList.add("Jane");
namesList.add("Smith");
namesList.add("Roger");


我下面有两个要测试的伪逻辑if语句,但我不确定如何使用lambda(我可以按照旧的方法进行操作,但尝试在此处学习)。

if nameslist contains John and Roger
   print "John & Roger"

if nameslist contains Jane and Smith
   print "Jane Smith"


使用Java Lambda,我如何测试列表中的两种情况?

最佳答案

我将按以下方式进行操作:

    if (namesList.stream()
            .filter(x -> (x.equals("John") || x.equals(("Roger"))))
            .collect(Collectors.toSet())
            .size() == 2) {
        System.out.print("John & Roger");
    }

    if (namesList.stream()
            .filter(x -> (x.equals("Jane") || x.equals(("Smith"))))
            .collect(Collectors.toSet())
            .size() == 2) {
        System.out.print("Hane Smith");
    }

09-05 10:36