Java Lambda 表达式

lambda表达式

1.举例:(o1, o2) -> Integer.compare(o1, o2)


2. 格式
  -> :lambda操作符或者箭头操作符
  ->左边 :lambda形参列表(其实就是接口中的抽象方法的形参列表)
  ->右边 :lambda体(其实就是重写的抽象方法的方法体)

3.lambda表达式的本质:作为函数式接口实现类的实例

4.lambda表达式的使用:
分几种情况:

复制代码
public class Lambda01 {

    @Test
    public void test01(){
        // 无参数,无返回值
        Runnable run = ()-> System.out.println("无返回值");
        run.run();

        // 有参数,无返回值(数据类型可省略,有接口可推断出类型)
        Consumer<String> consumer = (s) -> {System.out.println(s);};
        consumer.accept("有参数,无返回值");

        // 若只有一个参数,参数的小括号可省略
        Consumer<String> consumer1 = s -> {System.out.println(s);};
        consumer.accept("省略小括号");

        // 可以有两个或以上的参数,多条执行语句,而且可以有返回值
        //传统匿名内部类写法
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        // lambda写法
        Comparator<Integer> comparator1 = (o1, o2) -> {
            System.out.println(o1);
            System.out.println(o2);
           return o1.compareTo(o2);
        };
        System.out.println(comparator1.compare(12, 21));

        // 当lambda体只有一条语句时,return 与大括号都可以省略
        Comparator<Integer> comparator2 = (o1, o2) -> o1.compareTo(o2);
        System.out.println(comparator2.compare(22, 21));
    }
复制代码


总结:
  ->左边:lambda形参列表类型可以省略(类型推断),如果lambda形参只有一个参数,可以省略括号
  ->右边:lambda体应该使用一对{}包裹,如果lambda体只有一条执行语句(可能是return语句),大括号和return都可以省略。

5.函数式接口
如果一个接口只有一个抽象方法,那么该接口就是函数式接口
可通过lambda表达式来创建该接口的对象

Java一直倡导“一切皆对象”
6.所以以前用匿名实现类表示的现在都可以用lambda表达式来写

 

7.函数式接口
java内置四大核心函数式接口

 

 

 

复制代码
public class lambda02 {

    @Test
    public void test(){

        happyTime(500, d-> System.out.println("学习太累了"));

        List<String> stringList = Arrays.asList("北京", "天津", "南京", "东京", "普京");
        List<String> list = filterString(stringList, s -> s.endsWith("京"));
        System.out.println(list);

        List<String> upperStrings = stringUpper(Arrays.asList("hello", "java"), x -> x.toUpperCase());
        System.out.println(upperStrings);
    }

    public void happyTime(double money, Consumer<Double> consumer){
        consumer.accept(money);
    }

    // 根据给定的规则,过滤集合中的字符串,此规则有Predicate的test方法决定
    public List<String> filterString(List<String> list, Predicate<String> predicate){
        List<String> filterList = new ArrayList<>();
        for (String s: list) {
            if(predicate.test(s)){
                filterList.add(s);
            }
        }
        return filterList;
    }

    // 根据给定的规则,加工集合中的字符串,此加工规则有Function(根据自变量x,输出因变量y 类似于y = ax + b的关系)
    // 的方法决定
    public List<String> stringUpper(List<String> list, Function<String, String> function){
        List<String> newArrayList = Lists.newArrayList();
        for (String s: list){
            newArrayList.add(function.apply(s));
        }
        return newArrayList;
    }
}
复制代码

 

posted @   ilovetesting  阅读(512)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-02-21 python AES.MODE_ECB(128位) pkcs5padding 加密算法
点击右上角即可分享
微信分享提示