、その後、私はあなたドンを提案それらをリストに追加しないでください。代わりに、それらを単一の関数に構成し、その単一の関数を指定されたコレクションの各要素に適用します。
あなたmultipleMapping()
方法が1つの機能を受け取ることになる。
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");
そして、4つの機能:次のように
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);
さて、あなたは候補者および構成function
のリストにあなたのmultipleMapping()
メソッドを呼び出すことができます。
List<Integer> scores = multipleMapping(candidates, function);
だから我々は、明示的に新しい機能を構成することで、スコアのリストに候補者の私たちのリストを変換しています4つの異なる機能から構成され、この合成機能を各候補に適用する。
あなたは選挙に勝つだろう誰が知りたい場合、あなたは最高のスコアを持つ候補チェックすることができ、私は政治に興味を持っている誰のための練習としてそれをできるようになるが、)
は 'Function'sを実行します。すべてが入力と同じ型を返すか、異なる型を返すことができますか? – rgettman
最大数はどれくらいですか? –
最後の関数から返される型は何ですか? –