usar una tutorial todas tipos tienen streams son saber relación relaciones que programación programacion polimorfismo las lambdas inversas inversa herencia funciones funcional funcion flecha español entre ejemplos ejemplo con compuesta comprobar composición composicion como codigo clases anonima agregacion java java-8

java - una - ¿Cómo hacer composición de funciones?



tipos de composicion en java (2)

Hay un error en el uso de compose andThen . Tienes que tener variables explícitas, por lo que no puedes usar referencias de métodos como esta:

(Person::getAddress).andThen(Address::getCountry)

No será compilado. ¡Qué pena!

Pero puedes definir una función de utilidad y usarla felizmente:

public static <A, B, C> Function<A, C> compose(Function<A, B> f1, Function<B, C> f2) { return f1.andThen(f2); } compose(Person::getAddress, Address::getCountry)

Mientras esperaba con impaciencia el lanzamiento de Java 8 y después de leer el brillante artículo "State of the Lambda" de Brian Goetz noté que la composición de la función no estaba cubierta en absoluto.

Según el artículo anterior, en Java 8 debe ser posible:

// having classes Address and Person public class Address { private String country; public String getCountry() { return country; } } public class Person { private Address address; public Address getAddress() { return address; } } // we should be able to reference their methods like Function<Person, Address> personToAddress = Person::getAddress; Function<Address, String> addressToCountry = Address::getCountry;

Ahora, si me gustaría componer estas dos funciones para tener una función mapeo de Person a país, ¿cómo puedo lograr esto en Java 8?


Hay una función de interfaz predeterminada Function::andThen and Function::andThen y Function::compose :

Function<Person, String> toCountry = personToAddress.andThen(addressToCountry);