-
日常使用中,要定义一个map,常用的是一个都是常量值作为key或者value,但是不满足一些特殊的需求,比如将value需要通过参数形式返回不同的值。
-
有以下场景:
int num;
Person person = new Person();
String desc = "";
switch (num) {
case 1:
desc = String.format("我要这么展示,name:%s",person.getName());
break;
case 2:
desc = String.format("我要这么展示,name:,age:%s",person.getName(),person.getAge());
break;
default:
break;
}
- 写起来很繁琐,那么可以通过map + 函数式的方式处理,那么上述代码可以调整为下面代码
//调用
public void method(){
int num;
Person person = new Person();
String desc = PERSON_TYPE_MAP.get(num).apply(person);
}
//定义一个map跟Function组合使用的map
private final ImmutableMap<Integer, Function<Person, String>> PERSON_TYPE_MAP = ImmutableMap.<Integer, Function<Person, String>>builder()
.put(1, person -> String.format("我要这么展示,name:%s", person.getName()))
.put(2, person -> String.format("我要这么展示,name:,age:%s",person.getName(),person.getAge())
.build();
- 简洁很多,需要调加新的对应关系,直接在map里面再put便可。