Función de tabla (mapa) de Java en lugar de código if...else

Mapa + método de interfaz funcional reemplaza muchos juicios if...else.

¿Qué es el enfoque basado en tablas?

Es un patrón de programación que busca información de tablas sin usar sentencias lógicas (if y case). De hecho, todas las cosas que pueden seleccionarse mediante sentencias lógicas pueden seleccionarse consultando tablas. Para casos simples, es más fácil y directo usar declaraciones lógicas, pero a medida que la cadena lógica se vuelve más y más compleja, el método de la tabla de búsqueda se vuelve más y más atractivo.

Reglas generales de uso

Cuando sea apropiado, el enfoque basado en tablas puede generar código que es más simple, más fácil de modificar y más eficiente que el código lógico complejo.

La función basada en tablas (Función basada en tablas) es una técnica de programación común, que puede convertir una serie de declaraciones de juicio condicional en una operación de búsqueda basada en tablas, mejorando así la legibilidad y la capacidad de mantenimiento del código. En JAVA, podemos usar diferentes estructuras de datos para implementar funciones basadas en tablas. Además de matrices, también puede usar mapas, listas u otras estructuras de datos. La elección de diferentes estructuras de datos depende de los requisitos y escenarios de aplicación específicos.

La principal ventaja de las funciones basadas en tablas es que pueden hacer que el código sea más conciso, más fácil de entender y mantener. Usando funciones basadas en tablas, una gran cantidad de declaraciones de juicio condicional se pueden convertir en una tabla simple, lo que reduce la cantidad de código, reduce el riesgo de errores y hace que el código sea más fácil de expandir y modificar. Cabe señalar que el uso de funciones basadas en tablas no siempre es mejor que el uso de declaraciones de juicio condicional, depende de la situación específica. En algunos casos, puede ser más intuitivo y simple usar sentencias de juicio condicional. Por lo tanto, debemos elegir la técnica de programación más adecuada de acuerdo con la situación real.

Implementar funciones con Function

La función solo puede tener un parámetro de entrada y un parámetro de salida

El método get generará una excepción si no se puede recuperar

getOrDefault devolverá el valor predeterminado si no se puede obtener

aplicar es equivalente a ejecutar la función de valor en el mapa

Si necesita dos parámetros de entrada y un parámetro de salida, puede usar BiFunction

Si necesita dos parámetros de entrada y ningún parámetro de retorno, es decir, el tipo de retorno del método es nulo, puede usar BiConsumer

También hay muchas funciones con diferentes números de tipos de parámetros de entrada y salida:

La tabla de clases de embalaje correspondiente al tipo básico es la siguiente:

tipo básico

tipo de referencia

booleano

booleano

byte

Byte

corto

Corto

En t

Entero

largo

Largo

flotar

Flotar

doble

Doble

carbonizarse

Personaje

Código de ejemplo sencillo:

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;
    }
}

resultado de la operación:

un resultado

b-resultado

después del trato: c-resultado

por defecto

Supongo que te gusta

Origin blog.csdn.net/xijinno1/article/details/132137672
Recomendado
Clasificación