Java 要设置的多维数组的收集列
我有一个属性Java 要设置的多维数组的收集列,java,java-8,set,java-stream,collectors,Java,Java 8,Set,Java Stream,Collectors,我有一个属性this.sudoku,它是一个int[9][9]数组。 我需要把这一列放到一个集合中 Set<Integer> sudoku_column = IntStream.range(0, 9) .map(i -> this.sudoku[i][column]) .collect(Collectors.toSet());
this.sudoku
,它是一个int[9][9]
数组。
我需要把这一列放到一个集合中
Set<Integer> sudoku_column = IntStream.range(0, 9)
.map(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
Set sudoku\u column=IntStream.range(0,9)
.map(i->this.sudoku[i][column])
.collect(收集器.toSet());
我希望在这个集合中有一个列值。但是它说,Collectors.toSet()
不能应用于链中的这个collect函数。有人能解释为什么吗?使用IntUnaryOperator
,它表示对单个int值操作数的操作,该操作产生int值结果,因此结果是IntStream
,但是,IntStream
没有您试图使用的collect
重载,这意味着您有两个选项;i、 e.任何一种用途:
或者使用mapToObj
将IntStream
转换为Stream
,然后可以调用.collect(Collectors.toSet())
IntStream.range(0, 9)
.mapToObj(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
获取一个函数,该函数用于将一个int
转换为另一个int
如果你想继续做一件事,没关系。但是,如果需要将流收集到集合
,则需要将数据流转换为装箱的int
s,a,by
collector.toSet()
不能应用于链中的此collect
函数
Collectors.toSet()
返回一个收集器
,该收集器与IntStream
中单个收集器(供应商、ObjIntConsumer、双消费者)的签名不符。尽管如此,它仍然适用于。收集到一套时要小心。除了回答中解释的mapToObj
错误外,Collectors.toSet()
返回的Set
实现不会对其元素施加顺序。因此,您可能会丢失行的顺序,即返回集的第一个元素与对应于第一行的元素不匹配。您最好收集到列表中。
IntStream.range(0, 9)
.mapToObj(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
.map(i -> this.sudoku[i][column])
.boxed()
.collect(Collectors.toSet());