ich eine Abbildung von Strings auf die Funktionen definieren, würden sie mit entsprechen. Dies kann statisch sein.
Dann können Sie die Zuordnungen durchlaufen, die entsprechende (filter
) finden und die Funktion anwenden.
private static final Map<String, BiConsumer<MyClassDto, Element>> MAPPING = new HashMap();
static
{
mapping.put(ONE, MyClassDto::setOne);
mapping.put(TWO, MyClassDto::setTwo);
//...
mapping.put(SIX, MyClassDto::setSix);
}
//...
MAPPING.entrySet().stream()
.filter(pair -> pair.getKey().equalsIgnoreCase(eachTag.getNodeName()))
.map(Map.Entry::getValue)
.forEach(func -> func.accept(
myClassDto,
formatter.getElementValueAfterNullCheckWithTrim((Element) eachTag)
));
Möglicherweise möchten Sie den Fall betrachten, wo MAPPING
verschiedene Schlüssel enthalten kann, die gleich behandelt werden durch equalsIgnoreCase
(z „AAA“ und „aaa“).
Eine Lösung ist die Verwendung von findFirst().ifPresent()
anstelle von forEach
(wie von daniu vorgeschlagen), aber dies kann einige Fehlerfälle maskieren, also verwenden Sie es mit Vorsicht.
Der DTO Refactoring Teil ist sehr wichtig in Anbetracht seiner tatsächlichen Architektur. –
Wenn ich Schalter verwende, reduziere die Komplexität von 19 auf 17. Aber muss auf 10 reduziert werden. – user3431624
Wie ich in meiner Antwort sagte, ist die Verwendung von 'switch' genauso" komplex "wie die Verwendung von' if'. Es ist einfach lesbarer. Und was ist mit der Umgestaltung des DTO? Wenn Ihr DTO Daten nicht effizient akzeptiert, d. H. Es hat 100 set ***() -Methoden, bezweifle ich, dass Sie eine niedrigere Komplexität erhalten. – SurfMan