Правильно ли я понимаю что "::" - это просто способ не писать тело метода, а просто передать ссылку на метод с идентичной сигнатурой и функционал которого нам подходит?
И
salariesMap.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEach( s->System.out.println(s));
это тоже самое что и
salariesMap.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);
Ну-то бишь, компилятор видит необходимость реализовать функциональный интерфейс, но вместо тела единственного метода - я передаю ему ссылку на уже реализованный метод и если сигнатура совпадает - он просто принимает тело метода на который я ссылаюсь как тело метода реализующего интерфейс?
В моем случае
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
компилятор примет ссылку на любой метод, который принимает один параметр и ничего не возвращает.Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1