java8新特性-Lambda基础语法(2)

Lambda 表达式的基础语法,Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符。

  • 箭头操作符将 Lambda 表达式拆分为俩部分。
  • 左侧: Lambda 表达式的参数列表
  • 右侧: Lambda 表达式中所需要执行的功能 , 既 Lambda 体

接下来是Lambda 基础语法的使用

语法1:无参数,无返回值

    //语法一:无参数,无返回值 ()->System.out.println("hello Lambda..");
    @Test
    public void test1() {
        final int num = 0;
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello word" + num);
            }
        };
        runnable.run();
        System.out.println("-------Lambda 使用-------");
        Runnable runnable1 = () -> System.out.println("hello lambda ...");
        runnable1.run();
    }

语法二:有一个参数,并且无返回值

    //语法格式二: 有一个参数,并且无返回值
    //  (x)->System.out.println(x);
    //注意有一个参数,参数小括号可以省略不写
    //   x->System.out.println(x);
    @Test
    public void test2() {
        Consumer<String> consumer = (x) -> System.out.println(x);
        consumer.accept("这是一个信息");
    }

语法三:有俩个以上参数,有返回值,并且 Lambda 体重有多条语句

    //语法格式三: 有俩个以上参数,有返回值,并且 Lambda 体重有多条语句
    @Test
    public void test3() {
        Comparator<Integer> comparator = (x, y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x, y);
        };
        //这俩个语句是一致的
        //若Lambda 体中只有一条语句,return 和 大括号都可以省略不写
        Comparator<Integer> con = (x, y) -> Integer.compare(x, y);
    }

语法四:Lambda 表达式的参数列表的数据类型可以省略不写 , 因为 JVM 编译器 可以通过上下文,推断出数据类型,既 类型推断

    //语法格式四:Lambda 表达式的参数列表的数据类型可以省略不写 , 因为 JVM 编译器 可以通过上下文,推断出数据类型,既 类型推断
    @Test
    public void test4() {
        //类型推断我们以前都用过 如下
        //String[] strings = {"aa", "bb", "cc"};
        //如果下面分开写 就推断不出里面是什么类型,
        //String[] strings;
        //strings = {"aa", "bb", "cc"};
        //jdk 1.7 以后 ArrayList<> 后面是从上下文推断出数据库类型的
        List<String> list = new ArrayList<>();
        //使用show 方法接口无需填入参数的数据类型 可以通过上下文推断
        show(new HashMap<>());
    }

    public void show(Map<String, Integer> maps) {}

拓展

/**
 * 函数式接口 在 Java 中,Marker(标记)类型的接口是一种没有方法或属性声明的接口,简单地说,marker 接口是空接口。相似地,函数式接口是只包含一个抽象方法声明的接口
 *
 * @author Administrator
 * @version 1.0
 * @FunctionalInterface 用于判断该接口是否为函数式接口
 * @date 2019/11/6 15:13
 */
@FunctionalInterface
public interface MyFunction<T> {

    public T getVal(T t);

}

接口测试如下

    //需求:对一个数进行运算
    @Test
    public void test5(){
        MyFunction<Integer> myFunction = x -> x* x;
        Integer val = myFunction.getVal(100);
        System.out.println(val);

        MyFunction<Integer> myFunction1 = x -> x+ x;
        System.out.println(myFunction1.getVal(123 ));
    }

结果如下

发布了256 篇原创文章 · 获赞 188 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/102935937