Java中Lambda表达式的基本用法

Lambda

Lambda表达式作为Java 8中的新特性, 帮助我们开发者简化代码,更好的进行函数式编程,有必要详细了解它的用法。

  • What
  • Why
  • How

What

  1. Lambda表达式基于数学中的λ演算得名,而它并不是Java独有的,在别的语言中也广泛被使用,Lambda作为函数式编程中的基础部分,直接对应于其中的lambda进行抽象,同时它也是匿名函数,即没有函数名的函数。实质上可以实现某一接口的匿名内部类的中的方法 ,抛弃多余的代码,直接写出最重要的逻辑代码,正因为它是匿名函数,我们也不需要在起名上浪费时间。
  2. 组成部分:
    a. 括号包起来的参数
    b. 箭头 ( -> 操作符)
    c. 方法体,可以是单个语句,也可以是语句块

Why

  • 提供了更为简单的语法和写作方式
  • 取代匿名内部类
  • 简化代码,干净整洁

How

  • 取代匿名内部类
    //不使用Lambda
    public void testRunable() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("No Lambda Test");
            }
        }).start();
    }
    //使用Lambda
   public void testRunable() {
        new Thread(() -> System.out.println("Lambda Test")).start();
    }
  • 集合进行迭代
    这时就需要了解Java 8同时出的 java.util.stream类,封装了一些集合类,就重要的写几个例子。
    forEach
//forEach:迭代集合中所有的对象
public static void LambdaList() {

        List<String> lists = Arrays.asList("Lambdas", "Default Method", "java", "Android");
        // 原方法输出
        for (String list : lists) {
        System.out.println(list);
     }
        // 基本lambda输出
        lists.forEach(n -> System.out.println(n));
        // 进化; 方法引用使用::双冒号操作符表示
        lists.forEach(System.out::println);
    }

map (重点)

//map:将一个对象变换为另外一个
private static void LambdaMapReduce() {

        List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
        // 每一个数加1.2倍-------原来的方法
         for(Integer cost :costBeforeTax) {
         double price=cost+1.2*cost;
         System.out.println(price);
         }
        // 每一个数加1.2倍,然后输出------Lambda表达式
         costBeforeTax.stream().map(n -> n + n * 1.2).forEach(System.out::println);
        // 用map在数列中加逗号
        List<String> mapTest = Arrays.asList("qwerert", "asdasdddasd", "test");
        String joinTest = mapTest.stream().map(str -> str.toUpperCase()).collect(Collectors.joining(", "));
        System.out.println(joinTest);
    }

reduce

// Reduce:将所有值合并为一个
private static void LambdaMapReduce() {
         List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
         double result=costBeforeTax.stream().map(m ->m*1.2).reduce((sum,m)->sum+m).get();
         System.out.println(result);
       }

filter

//filter:比较过滤
    private static void lambdaFilter() {
        List<Integer> costBeforeTax=Arrays.asList(100,200,300,400,500);
        costBeforeTax.stream().filter(n->n>=300).forEach(System.out::println);
    }

总结

关于Java的Lambda表达式还有很多需要学习的地方,这些只不过是简单的一些用法,随着函数式编程的发展,Lambda表达式的作用会越来越大,同时简洁优雅也是它的一大特色,有句话说的好,简洁优雅就是生产力,还能炫技,简直爽到不行。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值