Использовать ссылку на метод с параметром

Я только начал изучать streamи Java и столкнулся с проблемой. Пожалуйста, взгляните на следующий пример. Это часть classа Node:

private Map nodes; public Optional child(String name) { return Optional.ofNullable(nodes.get(name)); } private void findChildren(String name, List result) { child(name).ifPresent(result::add); nodes.values().stream() // .map(Node::findChildren(name, result)) // .forEach(Node::findChildren(name, result)) .forEach(node -> node.findChildren(name, result)); } 

Моей целью было вызвать #findChildren с параметрами имени и результата на каждом узле в streamе. Я попытался использовать ссылку метода Node :: findChildren без везения. Я был бы признателен за решения, другие с оператором -> .

Можно ли как-то использовать ссылку на метод вместе с параметром? Мне нравится идея streamов, и я просто хочу сделать код более удобочитаемым.

На самом деле, я думаю, что есть аналогичный вопрос о методах с параметром, который я читал, но не могу понять, как использовать метод bind2 в моем коде. Это единственное решение?

Вы не можете использовать ссылки на методы для этой цели. Вы должны прибегать к lambda-выражениям. Причина, по bind2 метод bind2 связанного вопроса не работает, заключается в том, что вы на самом деле пытаетесь связать два параметра для преобразования функции с тремя аргументами в функцию с одним аргументом. Подобного простого решения нет, так как нет стандартного функционального interface для потребителей из трех стран.

Это должно было бы выглядеть

 interface ThreeConsumer { void accept(T t, U u, V v); } public static  Consumer bind2and3( ThreeConsumer c, U arg2, V arg3) { return (arg1) -> c.accept(arg1, arg2, arg3); } 

Затем .forEach(bind2and3(Node::findChildren, name, result)); может работать. Но это действительно проще, чем .forEach(node -> node.findChildren(name, result)); ?

  • Потоки последовательного и параллельного выполнения streamов Java8 дают разные результаты?
  • Являются ли выражения Java Lambda выражения «скрытыми» или локальными пакетами?
  • конвертировать список объектов из одного типа в другой, используя выражение lambda
  • Справочник по методу экземпляра и lambda-параметры
  • Java 8: Разница между ссылкой метода Bound Receiver и UnBound Receiver
  • Указатели функций, Закрытие и Лямбда
  • Завершение сеанса StopWatch с помощью делегата или lambda?
  • Связать Vs Лямбда?
  • Как сериализовать lambda?
  • Как определить функцию lambda для копирования копии вместо ссылки на C #?
  • Лямбда-захват как const-ссылка?
  • Interesting Posts
    Давайте будем гением компьютера.