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