jdk1.8新特性-使用Lambda表达式以及Stream

Lambda是什么?
  • Lambda是一个匿名函数, 本质是个”语法糖",
  • 由编译器推断并帮你转换包装为段 可以传递的代码(将代码像数据一样 进行传递。
    可以写出更简洁、更灵活的代码。
  • 作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
语法: Lambda表达式由三部分组成:一些参数,一个箭头,一段代码
(参数列表)-> {一些重写方法的代码};
Lambda表达式的简化格式

其实,Lambda表达式的核心原则是:只要可以推导,都可以省略,即可以根据上下文推导出来的内容,都可以省略书写,可以省略的内容如下:

  • 参数列表中的数据类型可以不写
  • 若参数列表中只有一个参数,则括号可以不写
  • 若方法体中的代码只有一行,则大括号、return和分号可以不写(若要省略必须三个一起省略)
循环演示:
List<String> list =Arrays asList("a","b","c");
for(String str :list)[
	System.out.println(str);
]

list.forEach(System.ou::println);
Stream过滤器演示:
这里撞见Student类就省略了······
这里给students 直接赋值
List<Student> students = Arrays.asList(
            new Student("小王",18,196,10000),
            new Student("张三",19,182,6000),
            new Student("李四",26,166,5000),
            new Student("老王",35,175,3000),
            new Student("周五",46,168,2500)
    );

//需求是找出年龄大于18,升高大于180的学生进行输出
students.stream()
            .filter((x)->x.getAge()>18)
            .filter((x)->x.getSize()>180)
            .forEach(System.out::println );
//提取所有人的姓名
students.stream()
       	.map(Student::getName)
       	.forEach(System.out::println);
常用语法
/**
     * 语法1:无参/无返回值
     */
    @Test
    public void test3(){
        //todo 未使用lambda
        int num=123;
        new Runnable() {
            @Override
            public void run() {
                System.out.println("bat.ke.qq.com"+num);
            }
        };
        //todo 使用lambda
        Runnable runnable = () -> System.out.println("bat.ke.qq.com" + num);
        runnable.run();
    }

    /**
     * 语法2:有一个参数/无返回值
     */
    @Test
    public void test4(){
        Consumer<String> com=(x)->System.out.println(x);
        com.accept("有一个参数/无返回值");
    }

    /**
     * 语法3:有一个参数/可以省略括号
     */
    @Test
    public void test5(){
        Consumer<String> com = x -> System.out.println(x);
        com.accept("有一个参数/可以省略括号");
    }

    /**
     * 语法4:又两个以上参数,有返回值,并且Lambda体中有多条语句
     */
    @Test
    public void test6(){
        Comparator<Integer> com=( x,y ) -> {
            System.out.println("111");
            return Integer.compare(x,y);
        };
    }

    /**
     * 语法5:Lambda体中只有一条语句,return和大括号都可以省略不写
     */
    @Test
    public void test7(){
        Comparator<Integer> com=( x,y ) -> Integer.compare(x,y);
    }

    /**
     * 语法6:参数指定类型
     */
    @Test
    public void test8(){
        //上下文推断
        Comparator<Integer> com=(Integer x, Integer y) -> Integer.compare(x,y);
    }
技术的升级迭代只是为了淘汰那些不学习的人!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值