Java 表驱动(map)函数替代if…else代码

Map + 函数式接口方法替代解决很多if…else这种判断。

什么是表驱动法?

是一种编程模式,从表里查找信息而不使用逻辑语句(if 和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白,但随着逻辑链的越来越复杂,查表法也就愈发显得更具有吸引力。

使用总则

适当的情况下,采用表驱动法,所生成的代码会比复杂的逻辑代码更简单,更容易修改,而且效率更高。

表驱动函数(Table-Driven Function)是一种常见的编程技巧,它可以将一系列的条件判断语句转化为一个基于表格的查找操作,从而提高代码的可读性和可维护性。在JAVA中,我们可以使用不同的数据结构来实现表驱动函数。除了数组之外,还可以使用Map、List或者其他数据结构。选择不同的数据结构,取决于具体的应用场景和需求。

表驱动函数的主要优点是它可以使代码更加简洁、易于理解和维护。使用表驱动函数,可以将大量的条件判断语句转化为一个简单的表格,从而减少代码量,降低出错的风险,并且使代码更加易于扩展和修改。需要注意的是,使用表驱动函数并不一定总是比使用条件判断语句更好,这取决于具体的情况。在某些情况下,使用条件判断语句可能更加直观和简单。因此,我们需要根据实际情况选择最适合的编程技巧。

用Function 实现函数

Function 只能是一个入参  一个出参

get 方法如果取不到会抛异常

扫描二维码关注公众号,回复: 16113892 查看本文章

getOrDefault  取不到会返回默认值

apply 相当于执行 map 里的 value 函数

如果需要两个入参 一个出参  可以用 BiFunction

如果需要两个入参 不需要返回参数 也就是方法返回类型为 void 可以用 BiConsumer

还有很多不同个数的出入参类型的函数:

基本类型对应的包装类表如下:

基本类型

引用类型

boolean

Boolean

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

简单示例代码:

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

运行结果:

a-result

b-result

after deal:c-result

default

猜你喜欢

转载自blog.csdn.net/xijinno1/article/details/132137672