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

相关文章
|
9月前
|
编译器
C++11 lambda表达式(上)
C++11 lambda表达式
46 0
|
23天前
|
算法 编译器 C++
C++一分钟之—Lambda表达式初探
【6月更文挑战第22天】C++的Lambda表达式是匿名函数的快捷方式,增强函数式编程能力。基本语法:`[capture](params) -&gt; ret_type { body }`。例如,简单的加法lambda:`[](int a, int b) { return a + b; }`。Lambda可用于捕获外部变量(值/引用),作为函数参数,如在`std::sort`中定制比较。注意点包括正确使用捕获列表、`mutable`关键字和返回类型推导。通过实践和理解这些概念,可以写出更简洁高效的C++代码。
34 13
|
1月前
|
C++
C++ lambda表达式
C++ lambda表达式
|
2月前
|
Java 编译器
Lambda表达式
Lambda表达式
16 0
|
2月前
|
Java
lambda表达式详解
lambda表达式详解
|
2月前
|
编译器 C++
C++lambda表达式
C++lambda表达式
|
2月前
|
算法 编译器
C++11(lambda表达式)
C++11(lambda表达式)
43 0
lambda表达式
lambda表达式是C++11引入的一种简洁的函数定义的方法。lambda表达式具有间接的语法和灵活的使用方式,让代码更加简洁和易读。特别是与function结合起来使得代码的编写更加灵活。本文将简单介绍lambda表达式的相关用法。
|
9月前
|
算法 搜索推荐 编译器
C++11:lambda表达式
C++11:lambda表达式
32 0
|
10月前
|
编译器 C++
C++中Lambda表达式
C++中Lambda表达式
73 0