[英]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.