Chcę wziąć jedną wiadomość dziennika pojo LoggedExchange
i zastosować do niej kilka transformacji. Przemiany są UnaryOperators w formie listy:Stosowanie listy funkcji do wartości ze strumieniem Java8 api
List<ConditionalTransform> transforms = new ArrayList<>();
gdzie ConditionalTransform
implementuje UnaryOperator<LoggedExchange>
i moje obecne rozwiązanie jest przy użyciu zmniejszyć tak:
public LoggedExchange transform(LoggedExchange original) {
return transforms.stream().reduce(original, (o, t) -> t.apply(o), (m1, m2) -> m2);
}
Running to równolegle nie ma sensu, ponieważ nie ma sposobu aby połączyć dwa komunikaty ((m1,m2) -> m2
jest po to, aby kompilator był szczęśliwy).
Czy istnieje lepszy sposób to zrobić (jak w jakiś sposób komponowanie wszystkich ConditionalTranforms
?), A jeśli nie, czy funkcja combiner
wyrzucić wyjątek lub coś, ponieważ nie mogę obsługiwać wykonania równoległego?
Według instrukcji JavaDoc większość tych operacji powinna być możliwa dzięki map
i reduce
, ale nie rozumiem, w jaki sposób.
Czy * musisz * używać strumieni? – immibis
Nie, po prostu jestem zwolniony z używania strumieni :) – vertti
Nigdy nie powinieneś dostarczać kombinacji, która cicho robi coś, jeśli * wiesz *, że nie jest to właściwe. Zapewnij kombinator * rzucania *, jeśli naprawdę nie masz alternatywy. – Holger