我有一个 this.sudoku
属性,它是一个 int[9][9]
数组。
我需要将其中的一列放入集合中。
Set<Integer> sudoku_column = IntStream.range(0, 9)
.map(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
我希望此集合中有一个列值。但它表示 Collectors.toSet()
不能应用于链中的这个 collect 函数。谁能解释一下为什么?
最佳答案
IntStream#map
消耗 IntUnaryOperator
它表示对单个 int 值操作数 产生int 值结果 的操作,因此结果是 IntStream
, 然而 IntStream
没有 collect
您尝试使用的重载,这意味着您有几个选择;即要么使用 IntStream#collect
:
IntStream.range(0, 9)
.collect(HashSet::new, (c, i) -> c.add(sudoku[i][column]), HashSet::addAll);
或使用 mapToObj
从 IntStream
转变至 Stream<Integer>
然后你可以调用.collect(Collectors.toSet())
IntStream.range(0, 9)
.mapToObj(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
关于java - 收集多维数组的列来设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117366/