0
点赞
收藏
分享

微信扫一扫

Java8新特性学习笔记

南柯Taylor 2022-03-26 阅读 96

B站视频指路:尚硅谷Java入门视频教程(在线答疑+Java面试真题)_哔哩哔哩_bilibili

写在前面:马上秋招,打算从0开始再学一遍Java,开个知识点记录贴,就当做课堂笔记吧.

Lambda表达式
        Lambda是一个匿名函数 我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁、更灵活的代码 作为一种更紧凑的代码风格 使Java的语言能力得到了提升
例:

package java8new;

import org.junit.Test;

import java.util.Comparator;

public class LambdaTest {
    @Test
    public void test(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("lambda");
            }
        };
        r1.run();
        Runnable r2 = ()-> System.out.println("lambda1223234234234");
        r2.run();
    }
    @Test
    public void test2(){
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        int compare = comparator.compare(12, 22);
        System.out.println(compare);
        //Lambda表达式的写法
        Comparator<Integer> comparator2 = (o1, o2) -> Integer.compare(o1,o2);
        int compare2 = comparator2.compare(43, 22);
        System.out.println(compare2);
        //方法引用的写法
        Comparator<Integer> comparator3 = Integer::compare;
        int compare3 = comparator3.compare(43, 22);
        System.out.println(compare3);
    }
}

 

  Lambda表达式的使用:

        1.举例:(o1, o2) -> Integer.compare(o1,o2);
        2.格式:
                ->: lambda操作符或箭头操作符
                ->左边: lambda形参列表 (其实就是借口中的抽象方法的形参列表)
                ->右边: lambda体 (其实就是重写的抽象方法的方法体)
        3.lambda的使用:六种

①无参 无返回值

 @Test
    public void test(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("lambda");
            }
        };
        r1.run();
        Runnable r2 = ()-> System.out.println("lambda1223234234234");
        r2.run();
    }

②Lambda需要一个参数 但是没有返回值

  @Test
    public void test(){
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("爱情三十六计");

        System.out.println("________________________");
        Consumer<String> con = (String s) -> {
            System.out.println(s);
        };
        con.accept("就像一场游戏");
    }

③数据类型可以省略 因为可以由编译器推断得出 称为 "类型推断"

  @Test
    public void test(){

        Consumer<String> con = (String s) -> {
            System.out.println(s);
        };
        con.accept("就像一场游戏");
        System.out.println("***************");
        Consumer<String> con2 = (s) -> {
            System.out.println(s);
        };
        con.accept("就像一场游戏");
    }

④Lambda若只有一个参数时 参数的小括号可以省略
      

 @Test
    public void test(){

        Consumer<String> con = (s) -> {
            System.out.println(s);
        };
        con.accept("就像一场游戏");
        System.out.println("***************");
        Consumer<String> con2 = s-> {
            System.out.println(s);
        };
        con.accept("就像一场游戏");
    }

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

 @Test
    public void test(){
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(comparator.compare(22, 34));
        System.out.println("********************");
        Comparator<Integer> comparator2 = (o1,o2)->{
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        System.out.println(comparator2.compare(22, 34));

    }

⑥当Lambda体只有一条语句时 return与大括号若有 都可以省略

  @Test
    public void test(){
        Comparator<Integer> comparator1 = (o1,o2)->{
            return o1.compareTo(o2);
        };
        System.out.println(comparator1.compare(22, 34));
        System.out.println("********************");
        Comparator<Integer> comparator2 = (o1,o2)-> o1.compareTo(o2);
        System.out.println(comparator1.compare(22, 34));
    }


总结:
        ->左边: lambda形参列表的参数类型可以省略(类型推断):若lambda形参列表只有一个参数 其一对()也可省略
        ->右边:lambda体应该使用一对{}包裹 若lambda体只有一条执行语句(可能是return语句) 可以省略这一对{}和return关键字

 

举报

相关推荐

0 条评论