赞
踩
Map + 函数式接口方法替代解决很多if…else这种判断。
是一种编程模式,从表里查找信息而不使用逻辑语句(if 和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白,但随着逻辑链的越来越复杂,查表法也就愈发显得更具有吸引力。
适当的情况下,采用表驱动法,所生成的代码会比复杂的逻辑代码更简单,更容易修改,而且效率更高。
表驱动函数(Table-Driven Function)是一种常见的编程技巧,它可以将一系列的条件判断语句转化为一个基于表格的查找操作,从而提高代码的可读性和可维护性。在JAVA中,我们可以使用不同的数据结构来实现表驱动函数。除了数组之外,还可以使用Map、List或者其他数据结构。选择不同的数据结构,取决于具体的应用场景和需求。
表驱动函数的主要优点是它可以使代码更加简洁、易于理解和维护。使用表驱动函数,可以将大量的条件判断语句转化为一个简单的表格,从而减少代码量,降低出错的风险,并且使代码更加易于扩展和修改。需要注意的是,使用表驱动函数并不一定总是比使用条件判断语句更好,这取决于具体的情况。在某些情况下,使用条件判断语句可能更加直观和简单。因此,我们需要根据实际情况选择最适合的编程技巧。
Function 只能是一个入参 一个出参
get 方法如果取不到会抛异常
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。