Как пребразовать IntStream в for. Как применяется IntUnaryOperator
Код из codesignal.com Помогите разобраться, как он работает. В частности, можно ли IntStream
переделать как for для понимания.
IntUnaryOperator
- почему выбран и что он делает. Представление о функциональных интерфейсах имею, но на уровне примитивных примеров.
boolean solution(char[][] grid) {
return IntStream.range(0, 9)
.allMatch(n ->
isValid(grid, k -> k, k -> n) &&
isValid(grid, k -> n, k -> k) &&
isValid(grid, k -> (n / 3) * 3 + k / 3, k -> (n % 3) * 3 + k % 3));
}
boolean isValid(char[][] grid, IntUnaryOperator rowSelector, IntUnaryOperator colSelector) {
Set<Character> s = new HashSet<>();
for (int k = 0; k < 9; k++) {
int r = rowSelector.applyAsInt(k);
int c = colSelector.applyAsInt(k);
if (grid[r][c] == '.') {
continue;
}
if (s.contains(grid[r][c])) {
return false;
}
s.add(grid[r][c]);
}
return true;
}