valor - referencia en java
Usar referencia de método con parámetro (1)
No puede usar referencias de método para este propósito. Tienes que recurrir a expresiones lambda. La razón por la cual el método bind2
de la pregunta vinculada no funciona es que en realidad está intentando vincular dos parámetros para convertir una función de tres arg en una función de una arg. No existe una solución similarmente simple ya que no existe una interface
funcional estándar para consumidores de tres arg.
Tendría que parecerse
interface ThreeConsumer<T, U, V> {
void accept(T t, U u, V v);
}
public static <T, U, V> Consumer<T> bind2and3(
ThreeConsumer<? super T, U, V> c, U arg2, V arg3) {
return (arg1) -> c.accept(arg1, arg2, arg3);
}
Entonces .forEach(bind2and3(Node::findChildren, name, result));
podría funcionar. Pero, ¿es esto realmente más simple que .forEach(node -> node.findChildren(name, result));
?
Acabo de comenzar a aprender las secuencias de Java y enfrenté un problema. Por favor, eche un vistazo al siguiente ejemplo. Esto es parte de una clase Node:
private Map<String, Node> nodes;
public Optional<Node> child(String name) {
return Optional.<Node>ofNullable(nodes.get(name));
}
private void findChildren(String name, List<Node> 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));
}
Mi intención era llamar a #findChildren con el nombre y los parámetros de resultado en cada nodo en la transmisión. Intenté usar el método referencias Node :: findChildren sin suerte. Agradecería soluciones diferentes, la única con ->
operador.
¿Es de alguna manera posible usar la referencia del método junto con un parámetro? Me gusta la idea de las transmisiones y solo quiero que el código sea más legible.
En realidad, creo que hay una pregunta similar. Metodologías de referencias con un parámetro que leo pero no puedo entender cómo usar el método bind2 en mi código. ¿Es la única solución?