lambda优雅的替换if-else
让人作呕的if语句
enum Type {
APPLE("apple"),
ORANGE("orange"),
PEAR("pear"),
OTHER("other");
private final String type;
Type(String type) {
this.type = type;
}
public String getVal() {
return type;
}
}
private void printFruitType(String type) {
if (Type.APPLE.getVal().equals(type)) {
System.out.println(Type.APPLE.getVal());
}
if (Type.ORANGE.getVal().equals(type)) {
System.out.println(Type.ORANGE.getVal());
}
if (Type.PEAR.getVal().equals(type)) {
System.out.println(Type.PEAR.getVal());
}
if (Type.OTHER.getVal().equals(type)) {
System.out.println(Type.OTHER.getVal());
}
}
@Test
public void fruit() {
List<String> fruits = Lists.newArrayList("orange", "pear", "apple", "other");
// 回去随机的水果类型
int index = (int) (Math.random() * 4);
printFruitType(fruits.get(index));
}
简单的lambda应用
enum Type {
APPLE("apple"),
ORANGE("orange"),
PEAR("pear"),
OTHER("other");
private final String type;
Type(String type) {
this.type = type;
}
public String getVal() {
return type;
}
}
/**
* 定义一个lambda 函数
*/
@FunctionalInterface
interface Handler {
void handler();
}
/**
* 注册水果类型和lambda方法
* @return Map
*/
private Map<Type, Handler> register() {
return new HashMap<Type, Handler>() {{
putIfAbsent(Type.PEAR, () -> System.out.println("pear"));
putIfAbsent(Type.ORANGE, () -> System.out.println("orange"));
putIfAbsent(Type.APPLE, () -> System.out.println("apple"));
putIfAbsent(Type.OTHER, () -> System.out.println("other"));
}};
}
@Test
public void functionPrint(){
Map<Type, Handler> handlerMap = register();
List<String> fruits = Lists.newArrayList("orange", "pear", "apple", "other");
// 获取随机的水果类型
int index = (int) (Math.random() * 4);
String type = fruits.get(index);
System.out.println(type);
handlerMap.get(Type.valueOf(type.toUpperCase()));
}
实际的一些应用
。。。未完待续