Если у вас есть несколько функций (например, если вы можете записать их), то я предлагаю вам не Не добавляйте их в список. Вместо этого составьте их в одну функцию, а затем примените эту единственную функцию к каждому элементу данной коллекции.
Ваш метод multipleMapping()
Теперь будет получать одну функцию:
public static <T, R> List<R> multipleMapping(
Collection<T> collection, Function<T, R> function) {
return collection.stream()
.map(function)
.collect(Collectors.toList());
}
Затем в коде вызова, вы можете создать функцию, состоящую из многих функций (вы будете иметь все функции, во всяком случае) и вызовите multipleMapping()
метод с этой функцией.
Например, предположим, что у нас есть список кандидатов:
List<String> candidates = Arrays.asList(
"Hillary", "Donald",
"Bernie", "Ted", "John");
И четыре функции:
Function<String, Integer> f1 = String::length;
Function<Integer, Long> f2 = i -> i * 10_000L;
Function<Long, LocalDate> f3 = LocalDate::ofEpochDay;
Function<LocalDate, Integer> f4 = LocalDate::getYear;
Эти функции могут быть использованы для составления новой функции следующим образом:
Function<String, Integer> function = f1.andThen(f2).andThen(f3).andThen(f4);
Или также следующим образом:
Function<String, Integer> composed = f4.compose(f3).compose(f2).compose(f1);
Теперь вы можете вызвать свой метод multipleMapping()
со списком кандидатов и наборной function
:
List<Integer> scores = multipleMapping(candidates, function);
Таким образом, мы превратили наш список кандидатов в список счетов, явным образом составляя новую функцию от четырех различных функций и применения этой скомпонованной функции к каждому кандидату.
Если вы хотите знать, кто победит на выборах, вы можете проверить, какой кандидат имеет самый высокий балл, но я дам, что в качестве упражнения для тех, кто заинтересован в политике;)
Выполните 'Function's все возвращают тот же тип, что и их ввод, или могут возвращать разные типы? – rgettman
Сколько у вас функций, максимум? –
И каков тип, возвращаемый последней функцией? –