【问题标题】:Find Matrix Index Position of an element using lamba使用 lambda 查找元素的矩阵索引位置
【发布时间】:2019-03-07 22:18:55
【问题描述】:

我有一个由数字 oneszeros 和一个数字 组成的矩阵。我想找到这个数字的索引位置,但我不想使用 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);
    }

}

【问题讨论】:

    标签: java matrix lambda


    【解决方案1】:

    不是很方便,因为 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);
    

    【讨论】:

    • mapToObj 无法识别 MatrixIndexPosition,因此我需要对其进行投射。
    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2015-04-15
    • 2015-05-13
    相关资源
    最近更新 更多