Por desgracia todos los intentos de la programación funcional tendrá una parte de detallado y/o incómoda a ella en Java.
El forma más directa es proporcionar una interfaz Function
(como this one form Guava) y proporcionar todo tipo de métodos que toman y lo llaman (como Collections#transfrom()
el que hace lo que yo creo que su método map()
debe hacer).
Lo malo es que es necesario implementar Function
ya menudo lo hace con una clase interna anónima, que tiene una sintaxis terriblemente detallado:
Collection<OutputType> result = Collections.transform(input, new Function<InputType,OutputType>() {
public OutputType apply(InputType input) {
return frobnicate(input);
}
});
Cabe señalar que la función de Lambda prevista de Java 8 lo hará considerablemente más fácil (¡y posiblemente aún más rápido!). El código equivalente en (la forma actual de) lambdas se vería así:
Collection<OutputType> result = Collections.transform(input, SomeClass::frobnicate);
o más detallado, pero más flexible:
Collection<OutputType> result = Collections.transform(input, in -> frobnicate(in));