Sto cercando un modo pulito per tradurre condizioni logiche complesse con if
e else
dichiarazioni che portano a diverse azioni, in lambda e corsi d'acqua.Tradurre complessa logica condizionale all'interno di un ciclo in torrenti e lambda
Supponiamo che io ho questo codice:
List<OuterData> result = new LinkedList<>();
for (Outer outer : getOutersFromSomewhere()) {
OuterData outerData = new OuterData();
if (outer.isImportant()) {
doImportantAction(outer, outerData);
} else if (outer.isTrivial()) {
doTrivialAction(outer, outerData);
} else {
doDefaultAction(outer, outerData);
}
for (Inner inner : outer.getInners()) {
if (inner.mustBeIncluded()) {
InnerData innerData = new InnerData();
if (inner.meetsCondition1()) {
doAction1(inner, innerData, outer, outerData);
} else if (inner.meetsCondition2()) {
doAction2(inner, innerData, outer, outerData);
} else {
doDefaultAction(inner, innerData, outer, outerData);
}
outerData.add(innerData);
}
}
result.add(outerData);
}
return result;
Questo è semplificato dal codice vero che ho. So che può essere ottimizzato e refactored, cioè potrei spostare interno for
in un metodo private
. Mi piacerebbe sapere come tradurre le parti di if
, else if
e else
in stream e lambda.
So come tradurre lo scheletro di questo esempio. Vorrei usare List.stream()
, Stream.map()
, Stream.filter()
, Stream.collect()
e Stream.peek()
. Il mio problema riguarda solo le filiali condizionali. Come posso fare questa traduzione?
Potrebbe essere possibile semplificare il codice nell'esempio. –
@RaulGuiu OK Lo farò. Grazie –
Penso che potresti usare alcuni filtri diversi con i condizionali if e un foreach con il corpo del if. –