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
fruits = Lists.newArrayList("orange", "pear", "apple", "other");
// 回去随机的水果类型
int index = (int) (Math.random() * 4);
printFruitType(fruits.get(index));
除了使用switch case语句之外还有lambda,下面来看lambda具体使用方法:
2、简单的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()));
在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?
还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。
接下来我们看一个具体的例子。
假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样使用:
public void inForEach(){
List ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
1、自己写代码实现1)return this的实现public MyClass ifExist(Consumer consumer) {if (exist()) {consumer.accept(this);}return this;}public MyClass ifNotExist(Consumer consumer) {if (!exist()) {consumer.accept(this)...
使用Java 8,我有这样的代码:if(element.exist()){// Do something}我想转换为lambda风格,element.ifExist(el -> {// Do something});使用ifExist方法,如下所示:public void ifExist(Consumer consumer) {if (exist()) {consumer.accept(th...
用Lambda表达式替换根据不同类型做判断的多 if 语句背景1、创建if条件的枚举类2、创建公共处理方法3、调用
根据不同类型,获取类似的处理结果。如果使用if做判断,则会造成代码冗余且不美观。
public String getTagNum(String tagType, Integer dataClass, String tagNo) {
String[] type = {};
if("typeA".equals(tagType)){
用lambda表达式去除过多的if else
在项目中在一个方法中过多的使用if else,一个复杂的业务可能会使用到6,7个if else,会影响代码的可读性,后期不利于维护,修改起来也很麻烦,例如:
private int ifResult(String value, int param) {
if(StringUtils.equals(value, "testA")...
函数式接口是JDK8的一个非常重要新特性,使用起来可以极大的简化代码。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
1、四大函数式接口
消费型接口:Consumer
供给型接口:Supplier
函数型接口:Function
断言型接口:Predicate
2、处理异常
* 异常处理接口