Lambda表达式

简介: Lambda表达式

 Lambda只留下参数和方法体!

Lambda只留下参数和方法体!

Lambda只留下参数和方法体!

image.gif编辑

案例一

package com.zsh.lambda;
/**
 * 案例一
 * 线程的内部类
 */
public class LambdaOne {
    public static void main(String[] args) {
        // Lambda简化前
        Thread oneThread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1的中run方法被执行了");
            }
        });
        // 启动线程
        oneThread.start();
        // Lambda简化后
        Thread twoThread = new Thread(() -> {
            System.out.println("线程2的中run方法被执行了");
        });
        // 启动线程
        twoThread.start();
    }
}

image.gif

案例二

package com.zsh.lambda;
import java.util.function.IntBinaryOperator;
/**
 * 案例二
 * 求和
 * 求差
 */
public class LambdaTwo {
    public static void main(String[] args) {
        // 简化前
        int sumOne = sumNum(new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return left + right;
            }
        });
        System.out.println("a + b = " + sumOne);
        // 简化后
        int sumTwo = sumNum((left, right) -> {
            return left - right;
        });
        System.out.println("a - b = " + sumTwo);
    }
    public static int sumNum(IntBinaryOperator operator){
        int a = 10;
        int b = 20;
        return operator.applyAsInt(a,b);
    }
}

image.gif

案例三

package com.zsh.lambda;
import java.util.function.IntPredicate;
/**
 * 案例三
 * 求奇数偶数
 */
public class LambdaThree {
    public static void main(String[] args) {
        // 简化前
        printNum(new IntPredicate() {
            @Override
            public boolean test(int value) {
                return value % 2 == 0;
            }
        });
        // 简化后
        printNum(value -> {
            return value % 2 != 0;
        });
    }
    public static void printNum(IntPredicate predicate){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for (int i : arr) {
            if (predicate.test(i)){
                System.out.println(i);
            }
        }
    }
}

image.gif

案例四

package com.zsh.lambda;
import java.util.function.Function;
/**
 * 案例四
 * 对泛型的操作
 */
public class LambdaFour {
    public static void main(String[] args) {
        // 简化前
        Integer resultOne = typeConver(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                // 将String转换成Integer
                Integer strResult = Integer.valueOf(s);
                return strResult;
            }
        });
        System.out.println(resultOne);
        // 简化后
        Integer resultTwo = typeConver((String s) -> {
            // 将String转换成Integer
            Integer strResult = Integer.valueOf(s);
            return strResult;
        });
        System.out.println(resultTwo);
        // 再次简化
        String redisThree = typeConver((String s) -> {
            return s + "这是再一次的优化";
        });
        System.out.println(redisThree);
    }
    public static <R> R typeConver(Function<String, R> function) {
        String str = "12345";
        R result = function.apply(str);
        return result;
    }
}

image.gif

案例五

package com.zsh.lambda;
import java.util.function.IntConsumer;
/**
 * 第五个案例
 */
public class
LambdaFive {
    public static void main(String[] args) {
        // 简化前
        foreachArr(new IntConsumer() {
            @Override
            public void accept(int value) {
                System.out.println(value);
            }
        });
        System.out.println("--------------------");
        // 简化后
        foreachArr((int value) -> {
            System.out.println(value);
        });
        System.out.println("--------------------");
        // lambda省略写法
        // 参数类型可以推导出来,直接省略
        foreachArr((value) -> {
            System.out.println(value);
        });
        // 只有一个参数,小括号直接省略
        foreachArr(value -> {
            System.out.println(value);
        });
        // 只有一句代码时,大括号、return、分号都可以省略
        foreachArr(value -> System.out.println(value));
        // 记不住以上规则,可以不省略
        foreachArr((int value) -> {
            System.out.println(value);
        });
    }
    public static void foreachArr(IntConsumer consumer){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for (int i : arr) {
            consumer.accept(i);
        }
    }
}

image.gif

最后:

1、参数类型可以推导出来,直接省略

2、只有一个参数,小括号直接省略

3、只有一句代码时,大括号、return、分号都可以省略

4、记不住以上规则,可以不省略!直接快捷键:ALT+Enter

相关文章
|
10月前
|
编译器
C++11 lambda表达式(上)
C++11 lambda表达式
48 0
|
3月前
|
Java 编译器
Lambda表达式
Lambda表达式
20 0
|
3月前
|
编译器 C语言 C++
C++ lambda表达式
C++ lambda表达式
|
3月前
|
Java
lambda表达式详解
lambda表达式详解
|
11月前
|
Java 编译器 C#
C#中的Lambda表达式
C#中的Lambda表达式
59 0
|
12月前
|
编译器 C++
【C++】Lambda表达式的使用
【C++】Lambda表达式的使用
87 0
|
3月前
|
编译器 C++
C++lambda表达式
C++lambda表达式
|
10月前
|
算法 搜索推荐 编译器
C++11:lambda表达式
C++11:lambda表达式
34 0
|
11月前
|
编译器 C++
C++中Lambda表达式
C++中Lambda表达式
79 0
|
Java
Lambda表达式的实际情况和应用
Lambda表达式是Java 8引入的一个重要特性,它提供了一种简洁而强大的方式来表示匿名函数。Lambda表达式可以用于各种情况和应用,包括但不限于以下几个方面:
65 0