簡體   English   中英

如何查找列表是否包含多個謂詞Java Lambda

[英]How to find if list contains multiple predicates Java Lambda

我試圖弄清楚如何在Java Lambda中的單個過濾器上執行多個謂詞,但沒有太多運氣。

我有一個字符串列表

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

我在pseudologic中有兩個if語句,我想測試但不知道如何用lambda做(我可以做舊學校的方法,但試着在這里學習)。

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

if nameslist contains Jane and Smith
   print "Jane Smith"

使用Java lambda如何測試列表中的兩個場景?

不要使用流:只需將英語轉換為代碼:

if (namesList.contains("John") && namesList.contains("Roger"))
    System.out.println("John & Roger");

要么

if (namesList.containsAll(Arrays.asList("John", "Roger")))
    System.out.println("John & Roger");

它更容易閱讀,並且可能比基於流的方法表現更好或更好。

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");
    }

你可以結合不同和計數:

if (namesList.stream()
        .filter(s -> s.equals("John") || s.equals("Roger"))
        .distinct()
        .count() == 2) {
    System.out.print("John & Roger");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM