Ich bin für eine saubere Art und Weise der Suche komplexe logische Bedingungen mit if
und else
Aussagen zu übersetzen, dass führen zu unterschiedlichen Aktionen, in Lambdas und Bäche.Übersetzen komplexe bedingte Logik in einer Schleife in Bäche und lambda
Angenommen, ich habe diesen Code:
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;
Diese von echtem Code vereinfacht die ich habe. Ich weiß, dass es optimiert und neu strukturiert werden kann, d. H. Ich könnte das innere for
zu einem private
-Verfahren bewegen. Ich würde gerne wissen, wie man die if
, else if
und else
Teile zu Streams und Lambda übersetzt.
Ich kann das Skelett dieses Beispiels übersetzen. Ich würde List.stream()
, Stream.map()
, Stream.filter()
, Stream.collect()
und Stream.peek()
verwenden. Mein Problem ist nur mit bedingten Verzweigungen. Wie kann ich diese Übersetzung machen?
Möglicherweise könnten Sie den Code in Ihrem Beispiel vereinfachen. –
@RaulGuiu OK, ich werde das tun. Danke –
Ich denke, dass Sie ein paar verschiedene Filter mit den if-Bedingungen und eine foreach mit dem Körper des if verwenden könnten. –