java8新特性之Lambda表达式

Java8引入了Lambda表达式,这是一种匿名函数,允许将代码作为数据处理。Lambda需要函数式接口支持,简化了代码,提高了开发效率。文章详细介绍了Lambda的基础语法,包括无参数、单参数、多参数的用法,并强调了类型推断的重要性。此外,还提到了Java8中的其他新特性如StreamAPI和函数式接口的概念。
摘要由CSDN通过智能技术生成

java8新增了一些新特性,包括:

  1.Lambda表达式(重要)

  2.函数式接口

  3.方法引用与构造器引用

  4.stream API(重要)

  5.接口中得默认方法和静态方法

  6.新时间日期

优点

  1.速度快,效率搞。(底层数据结构做了优化,gc做了优化)

  2.开发方便,更简洁。(lambda表达式)

  3.强大得stream API(更多得使用数据库处理数据得 方式处理集合数据)

  4.方便并行

  5.最大化得减少空指针异常 Optional

本文就先学习一下java8新特性中比较重要的Lambda表达式。

一、为什么要使用Lambda表达式

  Lambda是一个匿名函数,我们可以baLambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁,更灵活的代码。作为一种更紧凑得代码风格,使得java得语言表达能力得到提升。Lambda表达式需要函数式接口的支持,接口中只有一个抽象方法得接口叫做函数式接口。可以使用@FunctionalInterface修饰,可以检查是否是函数式接口。

二、Lambda表达式基础语法

  java8中新增了一个操作符,“->”箭头表达式,也叫Lambda操作符。Lambda表达式左侧为Lambda表达式得参数列表,右侧为操作步骤与逻辑,也叫做Lambda体。Lambda表达式有几种语法格式,下面就来一一学习。

1. 无参数,无返回值(()-> 接口得功能)。

/**
     *
     * 语法一:无参数,无返回值(()-> 执行的代码)
     */
    @Test
    public void test1() {
        //java8实现Runnable方法
        Runnable run = () -> System.out.println("Hello Lambda");
        run.run();

        //java8以前得写法
        Runnable run1 = new Runnable() {

            @Override
            public void run() {
                System.out.println("Hello World");
            }
        };
        run1.run();
    }

        其中需要注意得是,在java1.7以前,在匿名内部类中使用同级别得得局部变量时,这个局部变量必须时final类型得,但是在java8以后,局部变量不用final修饰了,final可以省略,但是其类型还是默认为final类型的。

2.一个参数,无返回值

/**
     * 语法二:一个参数,无返回值
     */
    @Test
    public void test2() {
        Consumer<String> t = (x) -> System.out.println(x);
        t.accept("Hello Lambda");
    }

注意,如果只有一个参数,小括号可以不写。

/**
     * 语法二:一个参数,无返回值
     */
    @Test
    public void test2() {
        Consumer<String> t = x -> System.out.println(x);
        t.accept("Hello Lambda");
    }

3. 多个参数,多条语句,有返回值。

/**
     * 语法三:多个参数,多条语句,有返回值。
     */
    @Test
    public void test3() {
        Comparator<Integer> com = (x, y) -> {
            System.out.println(x);
            System.out.println(y);
            return 0;
        };
        System.out.println(com.compare(1, 3));
    }

4.多个参数,一条语句,有返回值

/**
     * 语法四:多个参数,一条语句,有返回值
     */
    @Test
    public void test4() {
        //只有一条语句与返回值时,大括号和return都可以省略
        Comparator<Integer> com = (x, y) -> 0;

        System.out.println(com.compare(1, 3));
    }

注意:只有一条语句与返回值时,大括号和return都可以省略。

  Lambda表达式得参数列表可以不用写,因为JVM编译器可以通过上下文推断出类型,即“类型推断”

三、Lambda表达式需要“函数式接口”的支持

  函数式接口:接口中只有一个抽象方法时,那么这个接口叫做函数式接口。函数式接口可以使用@FunctionalInterface修饰,jvm会自动检查该接口是否为函数式接口。

@FunctionalInterface
public interface myLambdaModle<T> {
    public int test(T t1, T t2);     
}

需求:对两个数进行运算

@Test
    public void test5() {
        int sum1 = myTest(3, 6, (x, y) -> x*y);
        int sum2 = myTest(3, 6, (x, y) -> x-y);
        int sum3 = myTest(3, 6, (x, y) -> x+y);
        int sum4 = myTest(3, 6, (x, y) -> x/y);
    }


    public int myTest(int o1, int o2, myLambdaModle<Integer> m) {
        return m.test(o1, o2);
    }

        这样,我们就可以使用一个接口就对数字进行运算操作,具体什么操作可以自己去定义。

  从本文可以看出,原来JDK1.7以前,如果定义一个抽象方法,一个方法,就只能实现一种运算,而现在,实现完全可以自己去定义代码简化了许多。后面随笔会继续学习java8的四大内置得核心函数式接口。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值