如何在嵌套 Set 中使用 stream() (Set<Set<Integer>>)
How to use stream() in a nested Set (Set<Set<Integer>>)
所以我有一个嵌套集:
Set<Set<Integer>> WinningLines = Set.of(Set.of(0, 1, 2), Set.of(3, 4, 5), Set.of(6, 7, 8), Set.of(9, 10, 11),
Set.of(12, 13, 14), Set.of(15, 16, 17),Set.of(18, 19, 20),Set.of(21, 22, 23),
Set.of(0, 9, 21), Set.of(3, 10, 18),Set.of(6, 11, 15),Set.of(1, 4, 7),
Set.of(16, 19, 22), Set.of(8, 12, 17),Set.of(5, 13, 20),Set.of(2, 14, 23));
我想做的是用 stream() 遍历我的每个子集,检查子集是否包含特定的整数并输出包含整数的子集。
我的第一个方法是:
WinningLines.stream().forEach( System.out::println);
我尝试使用 filter(integer -> integer == 1)
,但它也没有用。是否可以使用 stream()
访问子集?
您可以使用一个简单的 for 循环:
for (Set<Integer> set: winningLines) {
if (set.contains(value)) System.out.println(set);
//and break if you only want to print the first one
}
使用流方法,它可能看起来像:
Optional<Set<Integer>> firstSet = winningLines.stream().findFirst(set -> set.contains(value));
或者如果你想要全部:
Stream<Set<Integer>> sets = winningLines.stream().filter(set -> set.contains(value));
sets.forEach(System.out::println);
您的筛选表达式有误。你需要
WinningLines.stream().filter (set -> set.contains(1))
.forEach( System.out::println);
你用 lambda 参数的名称误导了自己:变量 integer
实际上是 java.util.Set
类型,比较它 == 1
总是会产生 false
.您需要检查该集合是否包含 1
.
所以我有一个嵌套集:
Set<Set<Integer>> WinningLines = Set.of(Set.of(0, 1, 2), Set.of(3, 4, 5), Set.of(6, 7, 8), Set.of(9, 10, 11),
Set.of(12, 13, 14), Set.of(15, 16, 17),Set.of(18, 19, 20),Set.of(21, 22, 23),
Set.of(0, 9, 21), Set.of(3, 10, 18),Set.of(6, 11, 15),Set.of(1, 4, 7),
Set.of(16, 19, 22), Set.of(8, 12, 17),Set.of(5, 13, 20),Set.of(2, 14, 23));
我想做的是用 stream() 遍历我的每个子集,检查子集是否包含特定的整数并输出包含整数的子集。 我的第一个方法是:
WinningLines.stream().forEach( System.out::println);
我尝试使用 filter(integer -> integer == 1)
,但它也没有用。是否可以使用 stream()
访问子集?
您可以使用一个简单的 for 循环:
for (Set<Integer> set: winningLines) {
if (set.contains(value)) System.out.println(set);
//and break if you only want to print the first one
}
使用流方法,它可能看起来像:
Optional<Set<Integer>> firstSet = winningLines.stream().findFirst(set -> set.contains(value));
或者如果你想要全部:
Stream<Set<Integer>> sets = winningLines.stream().filter(set -> set.contains(value));
sets.forEach(System.out::println);
您的筛选表达式有误。你需要
WinningLines.stream().filter (set -> set.contains(1))
.forEach( System.out::println);
你用 lambda 参数的名称误导了自己:变量 integer
实际上是 java.util.Set
类型,比较它 == 1
总是会产生 false
.您需要检查该集合是否包含 1
.