有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用lamba查找元素的矩阵索引位置

我有一个矩阵,由数和一个位数组成。我想找到这个数字的索引位置,但不是使用for循环,而是使用lambdas。有人能帮我回答这个问题吗

这是我的代码:

    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) 个答案

  1. # 1 楼答案

    不太方便,因为Java streams缺少带索引的zip,int streams不能平面映射到对象,但类似这样的东西应该可以做到:

    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);