我有一个属性JavaScript:
<script>
var c = "<table><tr><td>1</td></tr><tr><td>2</td></tr></table>";
</script>
CSS:
<style>
.table1 { background-color:cyan; color:red; }</style>
,它是一个this.sudoku
数组。
我需要将其列放入集合中。
int[9][9]
我希望此集中有一个列值。但是它说Set<Integer> sudoku_column = IntStream.range(0, 9)
.map(i -> this.sudoku[i][column])
.collect(Collectors.toSet());
不能应用于链中的此collect函数。有人可以解释为什么吗?
答案 0 :(得分:4)
IntStream#map
消耗了IntUnaryOperator
,它表示对单个整数值操作数的操作,该操作数生成一个 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());
答案 1 :(得分:4)
IntStream#map
采用IntUnaryOperator
,该功能是将int
转换为另一个int
的功能。
如果您想继续使用IntStream
,那很好。但是,如果您需要将流收集到Set<Integer>
中,则需要将IntStream
转换为{{3} }。
int
.map(i -> this.sudoku[i][column]) .boxed() .collect(Collectors.toSet());
不能应用于链中的此Collectors.toSet()
函数
collect
返回的Collectors.toSet()
与Collector
中单个collect(Supplier, ObjIntConsumer, BiConsumer)
方法的签名不符。不过,它适用于Stream<Integer>
。