簡體   English   中英

"Java 8 Stream過濾列表中列表的值"

[英]Java 8 Stream filtering value of list in a list

我有一個如下所示的對象

class MyObject {

    String type;
    List<String> subTypes;

}

你可以做:

myObjects.stream()
         .filter(t -> t.getType().equals(someotherType) && 
                      t.getSubTypes().stream().anyMatch(<predicate>))
         .collect(Collectors.toList());

這將獲取所有MyObject對象

  • 滿足有關type成員的標准。
  • 包含嵌套List<String>中滿足某些其他條件的對象,用<predicate>表示

我看到了@kocko 的公認答案,這既是一個很好的答案,又是完全正確的。 但是,有一種稍微替代的方法,您只需將過濾器鏈接起來即可。

final List<MyObject> withBZ = myObjects.stream()
        .filter(myObj -> myObj.getType().equals("B"))
        .filter(myObj -> myObj.getSubTypes().stream().anyMatch("Z"::equals))
        .collect(Collectors.toList());

這基本上是在做同樣的事情,但&&操作數被刪除以支持另一個過濾器。 鏈接對於 Java 8 Stream API:s 和 IMO 非常有效,它更易於閱讀和遵循代碼。

我在這個網站上找到了一堆例子: https ://zetcode.com/java/streamfilter/

引用 Java Stream 多個過濾操作的示例

可以對流應用多個過濾器操作。

package com.zetcode;

import java.util.Arrays;
import java.util.function.IntConsumer;

public class JavaStreamMultipleFilters {

public static void main(String[] args) {

    int[] inums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
    
    IntConsumer icons = i -> System.out.print(i + " ");
    
    Arrays.stream(inums).filter(e -> e < 6 || e > 10)
            .filter(e -> e % 2 == 0).forEach(icons);
}

}

在示例中,我們對整數流應用多個過濾器操作。

int[] inums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

我們有一個整數值數組。

IntConsumer icons = i -> System.out.print(i + " ");

IntConsumer 是一個接受單個整數值參數並且不返回結果的操作。

Arrays.stream(inums).filter(e -> e < 6 || e > 10)
        .filter(e -> e % 2 == 0).forEach(icons);

使用 Arrays.stream 方法從數組創建流。 執行多個過濾操作。

2 4 12 14

這些整數滿足所有過濾條件。

暫無
暫無

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

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