собирая столбец многомерного массива для установки - PullRequest
0 голосов
/ 09 января 2019

У меня есть атрибут this.sudoku, который представляет собой массив int[9][9]. Мне нужно собрать столбец этого набора.

Set<Integer> sudoku_column = IntStream.range(0, 9)
                                      .map(i -> this.sudoku[i][column])
                                      .collect(Collectors.toSet());

Я ожидаю, что значения столбцов в этом наборе. но он говорит, что Collectors.toSet() нельзя применить к этой функции сбора в цепочке. Может кто-нибудь объяснить, почему?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

IntStream#map принимает IntUnaryOperator, который является функцией для преобразования int в другой int.

Хорошо, если вы хотите продолжить с IntStream. Но если вам нужно собрать поток в Set<Integer>, вам нужно превратить IntStream в поток в штучной упаковке int s, Stream<Integer>, путем IntStream#boxed.

.map(i -> this.sudoku[i][column])
.boxed()
.collect(Collectors.toSet());

Collectors.toSet() не может быть применено к этой collect функции в цепочке

Collectors.toSet() возвращает Collector, который не соответствует сигнатуре одиночного collect(Supplier, ObjIntConsumer, BiConsumer) метода в IntStream. Тем не менее, он подходит для Stream.collect(Collector).

0 голосов
/ 09 января 2019

IntStream#map потребляет IntUnaryOperator, который представляет собой операцию над одиночным операнда со значением , который выдает результат со значением со значением , таким образом, результат 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...