java - 收集多维数组的列来设置

标签 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());

我希望此集合中有一个列值。但它表示 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);

或使用 mapToObjIntStream 转变至 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/

相关文章:

java - 如何在rdd操作中读取数据帧

java - 如何比较单个字符串中的元素?

java - OpenCms 可以与 IDE 集成或使用吗?

java - BiFunction 接口(interface)中的默认 andThen() 方法

java - Łukasiewicz 谓词逻辑?

Mysql SET NAMES UTF8 - 如何去掉?

python - 循环遍历一组 Python 数字或一组字母是否更快?

c++ - 在集合 0-N 中找到基数 C 的所有可能子集

java - 在 jframe 中读取已删除的面板

java-8 - 如何使用 Collectors.toMap 从具有列表的对象集中收集 map