如何在嵌套 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.