Все попытки функционального программирования будут иметь некоторую часть подробного и / или неловкого к нему в Java до Java 8.
Наиболее прямой способ заключается в предоставлении интерфейса Function
(например, в этой форме Guava ) и предоставлении всех видов методов, которые принимают и вызывают его (например, Collections#transfrom()
что делает то, что, как я думаю, должен делать ваш map()
метод).
Недостатком является то, что вам нужно реализовать Function
и часто делать это с помощью анонимного внутреннего класса, который имеет ужасно многословный синтаксис:
Collection<OutputType> result = Collections.transform(input, new Function<InputType,OutputType>() {
public OutputType apply(InputType input) {
return frobnicate(input);
}
});
Лямбда-выражения (введено в Java 8) значительно упрощают (и, возможно, быстрее).Эквивалентный код с использованием лямбды выглядит так:
Collection<OutputType> result = Collections.transform(input, SomeClass::frobnicate);
или более подробный, но более гибкий:
Collection<OutputType> result = Collections.transform(input, in -> frobnicate(in));