Java-tabellengesteuerte (Map-)Funktion anstelle von if...else-Code

Die Map + funktionale Schnittstellenmethode ersetzt viele if...else-Urteile.

Was ist ein tabellengesteuerter Ansatz?

Ist ein Programmiermuster, das Informationen aus Tabellen nachschlägt, ohne logische Anweisungen (if und case) zu verwenden. Tatsächlich können alle Dinge, die durch logische Anweisungen ausgewählt werden können, durch Nachschlagen in Tabellen ausgewählt werden. Für einfache Fälle ist es einfacher und unkomplizierter, logische Anweisungen zu verwenden, aber je komplexer die Logikkette wird, desto attraktiver wird die Nachschlagetabellenmethode.

Allgemeine Nutzungsregeln

Bei Bedarf kann der tabellengesteuerte Ansatz Code generieren, der einfacher, leichter zu ändern und effizienter ist als komplexer Logikcode.

Die tabellengesteuerte Funktion (tabellengesteuerte Funktion) ist eine gängige Programmiertechnik, mit der eine Reihe bedingter Beurteilungsanweisungen in eine tabellenbasierte Suchoperation umgewandelt werden kann, wodurch die Lesbarkeit und Wartbarkeit des Codes verbessert wird. In JAVA können wir verschiedene Datenstrukturen verwenden, um tabellengesteuerte Funktionen zu implementieren. Neben Arrays können Sie auch Karten, Listen oder andere Datenstrukturen verwenden. Die Auswahl unterschiedlicher Datenstrukturen hängt von spezifischen Anwendungsszenarien und Anforderungen ab.

Der Hauptvorteil tabellengesteuerter Funktionen besteht darin, dass sie den Code prägnanter, verständlicher und wartungsfreundlicher machen können. Mithilfe tabellengesteuerter Funktionen kann eine große Anzahl bedingter Beurteilungsanweisungen in eine einfache Tabelle umgewandelt werden, wodurch die Codemenge reduziert, das Fehlerrisiko verringert und die Erweiterung und Änderung des Codes erleichtert wird. Es ist zu beachten, dass die Verwendung tabellengesteuerter Funktionen nicht immer besser ist als die Verwendung bedingter Beurteilungsanweisungen, sondern von der jeweiligen Situation abhängt. In manchen Fällen kann es intuitiver und einfacher sein, bedingte Urteilsaussagen zu verwenden. Daher müssen wir entsprechend der tatsächlichen Situation die am besten geeignete Programmiertechnik auswählen.

Implementieren Sie Funktionen mit Function

Die Funktion kann nur einen Eingabeparameter und einen Ausgabeparameter haben

Die get-Methode löst eine Ausnahme aus, wenn sie nicht abgerufen werden kann

getOrDefault gibt den Standardwert zurück, wenn dieser nicht abgerufen werden kann

„Anwenden“ entspricht der Ausführung der Wertfunktion in der Karte

Wenn Sie zwei Eingabeparameter und einen Ausgabeparameter benötigen, können Sie BiFunction verwenden

Wenn Sie zwei Eingabeparameter und keine Rückgabeparameter benötigen, das heißt, der Rückgabetyp der Methode ist ungültig, können Sie BiConsumer verwenden

Es gibt auch viele Funktionen mit unterschiedlicher Anzahl an Ein- und Ausgabeparametertypen:

Die dem Grundtyp entsprechende Verpackungsklassentabelle lautet wie folgt:

Grundtyp

Referenztyp

Boolescher Wert

Boolescher Wert

Byte

Byte

kurz

Kurz

int

Ganze Zahl

lang

Lang

schweben

Schweben

doppelt

Doppelt

verkohlen

Charakter

Einfacher Beispielcode:

import java.util.HashMap;
import java.util.function.Function;

public class Demo {
    public static void main(String[] args) {
        String aResult = dataMappings.getOrDefault("0", defaultMapping).apply("a-result");
        System.out.println(aResult);
        String bResult = dataMappings.get("1").apply("b-result");
        System.out.println(bResult);
        String cResult = dataMappings.getOrDefault("3", defaultMapping).apply("c-result");
        System.out.println(cResult);
        String defaultResult = dataMappings.getOrDefault("100", defaultMapping).apply("default-result");
        System.out.println(defaultResult);
    }

    static HashMap<String, Function<String, String>> dataMappings = new HashMap<String, Function<String, String>>() {
        {
            put("0", (String param) -> {
                return param;
            });
            put("1", (String param) -> {
                return param;
            });
            put("2", (String param) -> {
                return param;
            });
            put("3", (String param) -> {
                return deal(param);
            });
            put("4", (String param) -> {
                return deal(param);
            });
        }
    };

    static Function<String, String> defaultMapping = new Function<String, String>() {
        @Override
        public String apply(String s) {
            return "default";
        }
    };

    static String deal(String param) {
        return "after deal:" + param;
    }
}

Operationsergebnis:

ein Ergebnis

B-Ergebnis

nach Deal:c-result

Standard

Ich denke du magst

Origin blog.csdn.net/xijinno1/article/details/132137672
Empfohlen
Rangfolge