Найти матричный индекс Положение элемента, используя лямбу - PullRequest
0 голосов
/ 07 марта 2019

У меня есть матрица, состоящая из чисел единиц и нулей и одной цифры девять .Я хотел бы найти индексную позицию этого числа, но вместо использования для циклов я хотел бы использовать лямбда-выражения.Кто-нибудь может мне помочь с таким вопросом?

Вот мой код:

    import java.util.Arrays;


public class FindArrayIndex {
    static final int[][] MATRIX = new int[][] {{1,0,0},{1,0,1},{1,9,0}};
    static final int NINE = 9;

    public static void main(String[] args){
        printMatrix(MATRIX);
        printMatrixIndexPosition(findMatrixIndexPosition(MATRIX, NINE));
    }

    private static void printMatrixIndexPosition(MatrixIndexPosition mip) {
        System.out.println(mip);
    }

    static void printMatrix(int[][] matrix){
        Arrays.stream(matrix).map(Arrays::toString).forEach(System.out::println);
    }

    static MatrixIndexPosition findMatrixIndexPosition(int[][] matrix, int searchNumber){
        final int rows = matrix.length;
        final int columns = matrix[0].length;
        MatrixIndexPosition mip = null;
        outter : for(int i = 0; i < rows; i++){
            for(int j = 0; j < columns; j++){
                if(matrix[i][j] == searchNumber) {
                    mip = new MatrixIndexPosition(i, j);
                    break outter;
                }
            }
        }
        return mip;
    }
}

class MatrixIndexPosition {
    int row;
    int column;
    public MatrixIndexPosition(int row, int column){
        this.row = row;
        this.column = column;
    }

    public String toString(){
        return String.format("row index: %d \ncol index: %d", row, column);
    }

}

1 Ответ

0 голосов
/ 07 марта 2019

Не очень удобно, поскольку потокам Java не хватает zip с индексом, а потоки int не могут быть плоско сопоставлены с объектами, но что-то вроде этого должно сделать это:

MatrixIndexPosition mip = IntStream.range(0, MATRIX.length)
    .boxed()
    .flatMap(i -> IntStream.range(0, MATRIX[i].length)
            .mapToObj(j -> new MatrixIndexPosition(i, j)))
    .filter(pos -> MATRIX[pos.row][pos.column] == searchNumber)
    .findAny()
    .orElse(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...