java8新特性 lambda表达式

Lambda表达式

   在我的理解中,Lambda表达式是类似匿名内部类,比匿名内部类更简洁。是将方法当成一个参数穿递给某个
方法。Lambda表达式格式:  参数列表 -> 执行的代码块 
如下例子:
package com.yezi.ds.java8features;
import com.google.common.collect.Lists;
import org.junit.Test;
import java.util.List;
import java.util.function.Supplier;
/**
 * @Description : java8 新特性之  Lambda表达式
 * @Author : 高冷的美男子
 * @Date : Created in 14:35 2018/3/20
 */
public class FeaturesOfLambdaTest {

    public List<Integer> list = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10);
      /**
       * @Description : 1.Lambda 表达式
       * @Author : 高冷的美男子
       * @Date : Created in 14:36 2018/3/20
       */
      @Test
      public void testLambda(){
          //以前的集合遍历
          for (Integer integer:list) {
              System.out.println(integer);
          }


        //     -> 左边的是参数 右边是执行的代码块
        list.forEach( e -> System.out.println("输出:"+e));
        //上面的参数类型是由编译器判断出来的  可以显示声明参数类型
        list.forEach((Integer e)->System.out.println("输出"+e));
        //如果有多行代码块时 可以用大括号给这些代码括起来
        list.forEach(e->{
            System.out.println("第一次输出:"+e);
            System.out.println("第二次输出:"+e);
        });
        //lambda表达式可以引用成员变量和局部变量(会将这些变量隐式转换为final的),
         //下面两段代码效果相同
          String string="哈哈哈哈";
          list.forEach(e->System.out.println(e+string));

          final String string2="哈哈哈哈哈哈哈哈哈哈哈哈哈";
          list.forEach(e->System.out.println(e+string2));

         //Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果Lambda表达式中的
         // 语句块只有一行,则可以不用使用return语句,下列两个代码片段效果相同:
          list.sort( ( e1, e2 ) -> e1.compareTo( e2 ) );

          list.sort( ( e1, e2 ) -> {
              int result = e1.compareTo( e2 );
              return result;
          });

      }

}

Lambda的设计者们为了让现有的功能与Lambda表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念。函数接口指的是只有一个函数的接口,这样的接口可以隐式转换为Lambda表达式。

参考博客:
1、https://www.cnblogs.com/xingzc/p/6002873.html

猜你喜欢

转载自blog.csdn.net/weixin_39913200/article/details/79698405