単一のログメッセージpojoLoggedExchange
を取得し、それに一連の変換を適用したいと思います。変換は、リスト内のUnaryOperatorsです。
List<ConditionalTransform> transforms = new ArrayList<>();
どこConditionalTransform
実装UnaryOperator<LoggedExchange>
と私の現在のソリューションを使用しているが、このよう減らします:
public LoggedExchange transform(LoggedExchange original) {
return transforms.stream().reduce(original, (o, t) -> t.apply(o), (m1, m2) -> m2);
}
これを並行して実行することは意味がありません。2つのメッセージを組み合わせる方法がないためです((m1,m2) -> m2
コンパイラーを満足させるためだけにあります)。
これを行うためのより良い方法はありConditionalTranforms
ますか(どういうわけかすべてを構成するなど)、そうでない場合は、combiner
並列実行をサポートできないため、関数は例外などをスローする必要がありますか?
JavaDocでのこれらの操作のほとんどはで行うことが可能であるべき状態map
とreduce
が、私はどのように表示されません。
このようなものが機能するはずです:
public LoggedExchange transform(LoggedExchange original) {
return transforms.stream().reduce(UnaryOperator.identity(), (a, b) -> ((LoggedExchange o) -> b.apply(a.apply(o)))).apply(original);
}
これにより、UnaryOperator<LoggedExchange>
すべての関数transforms
を順番に適用するシングルが作成され、入力値を使用して呼び出されます。
または、単純なループバージョンが常にあります。
public LoggedExchange transform(LoggedExchange value) {
for(UnaryOperator<LoggedExchange> transform : transforms)
value = transform.apply(value);
return value;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加