MatrixUtils { public static DoubleMatrix2D sortedRowsView( DoubleMatrix2D matrix, IndirectComparator comparator) { return matrix.viewSelection(IndirectSort.mergesort(0, matrix.rows(), comparator), null); }  static DoubleMatrix2D normalizeColumnL2(DoubleMatrix2D A, double[] work); static DoubleMatrix2D normalizeSparseColumnL2(
      final DoubleMatrix2D A, final double[] work); static DoubleMatrix2D normalizeColumnL1(DoubleMatrix2D A, double[] work); static double computeOrthogonality(DoubleMatrix2D A); static double computeSparseness(DoubleMatrix2D A); static int[] minInColumns(DoubleMatrix2D A, int[] indices, double[] minValues); static int[] maxInColumns(DoubleMatrix2D A, int[] indices, double[] maxValues); static int[] maxInColumns(
      DoubleMatrix2D A, int[] indices, double[] maxValues, DoubleFunction transform); static int maxInRow(DoubleMatrix2D A, int row); static double[] sumRows(DoubleMatrix2D A, double[] sums); static double frobeniusNorm(DoubleMatrix2D matrix); static DoubleMatrix2D sortedRowsView(
      DoubleMatrix2D matrix, IndirectComparator comparator);  }
@Test public void sortedRowsView() { final DenseDoubleMatrix2D input = new DenseDoubleMatrix2D( new double[][] { {1, -1}, {2, -2}, {3, -3} }); final int[] order = new int[] {2, 1, 0}; MatrixAssertions.assertThat( MatrixUtils.sortedRowsView(input, new IndirectComparator.AscendingIntComparator(order))) .isEquivalentTo( new double[][] { {3, -3}, {2, -2}, {1, -1} }); }