Java8新特性(Lambda 表达式的用法)

本文介绍了Java8的Lambda表达式,包括其实例、语法特点和四大内置函数式接口的应用。Lambda表达式简化了匿名内部类的使用,通过推断系统进行类型判断,常与函数式接口搭配使用。需要注意Lambda不能在Text单元测试中直接执行。
摘要由CSDN通过智能技术生成

一、lambda表达式的实例

1.Lambda表达式是基于推断系统, 从左向右推断
2.Lambda省略了new 接口名() {}
3.省略方法的修饰符, 方法名.
4.省略参数的数据类型, 方法体中只有一个语句时,省略方法体的{}, return 也省略, 因为右面代5.表的就是输出.

6.只有一个参数时, ()也省略

7.lambda表达式只能和函数式接口配合
8.只有一个抽象方法的接口称为函数式接口

public static void main(String[] args) {
        //匿名内部类
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println(" Hello World!!!");
            }
        };
        r1.run();

        //Lambda 表达式
        Runnable r2=()-> System.out.println(" Hello Lambda!!!" );
        r2.run();
    }

注意:Lambda 表达式必须要在main方法中执行,不能在Text单元测试中执行

二、Lambda表达式的一些语法 

语法格式一:无参无返回值

 语法格式二:有一个参,无返回值

 语法格式三:数据类型可以省略,因为编译器可以通过类型推断得出

 语法格式四Lambda 若只需要一个参数时,参数的小括号可以省略

 

 语法格式五Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回

 

 语法格式六Lambda 体只有一条语句时,return 与大括号若有,都可以省略

 三、Java内置四大函数式接口

函数式接口

参数类型

返回类型

用途

Consumer<T>

消费型接口

T

void

对类型为T的对象应用操作,包含方法

void accept(T t)

public void exer1() {
        Student s = new Student(5, "小伟", 5, 80);
            //内名内部类的写法
        Consumer<Student> consumer1 = new Consumer<Student>() {
            @Override
            public void accept(Student student) {
                System.out.println(student);
            }
        };
        consumer1.accept(s);
            //Lambda 表达式写法
        Consumer<Student> consumer2 = a -> System.out.println(a);
        consumer2.accept(s);
    }

Supplier<T>

供给型接口

T

返回类型为T的对象,包含方法T get()

 @Test
    public void test2() {
        //匿名内部类的写法
        Supplier<String> supplier1 = new Supplier<String>() {
            @Override
            public String get() {
                return "aldksjflaksdf";
            }
        };
        String s1 = supplier1.get();
        System.out.println(s1);

         //Lambda表达式的写法
        Supplier<Double> supplier2 = () -> Math.random();
        Double s2 = supplier2.get();
        System.out.println(s2);
    }

Function<T, R>

函数型接口

T

R

对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法R apply(T t)

 @Test
    public void test3() {
        //匿名内部类的写法
        Function<String, Integer> function1 = new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return new Integer(s);
            }
        };
        Integer i1 = function1.apply("32842");
        System.out.println(i1);
        
        //Lambda 表达式的写法
        Function<Integer, String> function2 = t -> String.valueOf(t);
        String s2 = function2.apply(8234234);
        System.out.println(s2);
    }

Predicate<T>

断定型接口

T

boolean

确定类型为T的对象是否满足某约束,并返回 boolean 值。包含方法

boolean test(T t)

 

 @Test
    public void test4() {
        //匿名内部类的写法
        Predicate<Integer> predicate1 = new Predicate<Integer>() {
            @Override
            public boolean test(Integer integer) {
                return integer % 2 != 0;
            }
        };
        boolean t1 = predicate1.test(92);
        System.out.println(t1);

        //Lambda表达式的写法
        Predicate<String> predicate2 = t -> t.isEmpty(); // 判定字符串是否为空串.
        boolean t2 = predicate2.test("");
        System.out.println(t2);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值