Наличие определенного метода с Comparator
в качестве одного из формальных параметров означает, что вы можете передать в него лямбда-выражение функционального интерфейса, соответствующего Comparator
. Не забудьте обернуть Comparator
вокруг упакованных типов, так как вы не можете использовать примитивные.
Важнейшим является Comparator::compare
, который возвращает int
и, следовательно, ведет себя как BiFunction<T, T, Integer>
, должен быть сокращен как лямбда-выражение (или ссылка на метод в некоторых случаях):
double[][] doubleArray = ...
Comparator<Double> comparator = (left, right) -> (int)(left - right);
boolean[][] booleanArray = matrix_check(doubleArray, comparator);
Лямбда-выражение может также передаваться напрямую:
double[][] newDoubleArray = matrix_check(doubleArray, (int)(left - right));
В приведенном выше примере вы должны учитывать точность, потерянную при приведении к int
. double
не подходят для объяснения лямбда-выражения. Для целых чисел или объектов, реализующих Comparable
все было бы намного проще:
Comparator<Integer> c1 = (l, r) -> l- r; // l - r results in int
Comparator<String> c2 = (l, r) -> l.compareTo(r); // implements Comparable by default
Comparator<MyObject> c3 = (l, r) -> l.compareTo(r); // must implement Comparable