jdk8新特性 --- Lambda 、Stream流 、方法引用

25 篇文章 0 订阅
1 篇文章 0 订阅

Lambda表达式

  • 格式: (参数列表)->{代码块}
  • 前提: 函数式接口

使用套路:

  1. 分析是否可以使用Lambda表达式
  2. 如果可以使用,就直接写上()->{}
  3. 填充小括号中的内容–>和函数式接口中抽象方法的形参列表一致
  4. 填充大括号中的内容–>实现函数式接口抽象方法的方法体一致

省略规则:

  1. 小括号中参数类型可以省略
  2. 小括号中如果只有一个参数,那么小括号也可以省略
  3. 大括号中如果只有一条语句,那么大括号,分号,return都可以省略(一起省略)

方法引用:

  1. 判断是否可以使用方法引用替换Lambda表达式—>使用场景
  2. 如果可以使用,那么就得确定引入方法的类型
  3. 确定引入的方法的类型之后,根据引入格式引入该方法即可

方法的类型:

  • 静态方法: 类名::方法名
  • 构造方法: 类名::new
  • 无参数成员方法: 类名::方法名
  • 有参数的成员方法: 对象名::方法名

Stream流:

  • 使用步骤: 获取流—>操作流---->收集结果
  • Stream流api:
  • forEach ,count , collect
  • filter 、limit 、skip 、map 、concat …

案例示例

  • 标准类
package com.java8New;

/**
 * @Author: Mr.Xu
 * @description: person类---标准类
 * @Date: 2021/10/8  15:22
 */
public class person {
    //成员变量
    private String name;

    //无参构造
    public person() {
    }

    //有参构造
    public person(String name) {
        this.name = name;
    }

    //获取get/set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //重写toString方法
    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                '}';
    }
}

  • 测试类
package com.java8New;

import java.util.stream.Stream;

/**
 * @Author: Mr.Xu
 * @description: java8新特性 lambda表达式和stream流
 * @Date: 2021/10/8  15:18
 */
public class Test {
    public static void main(String[] args) {
        //获取流
        Stream<String> stream1 = Stream.of("张三三", "李四四", "王五", "赵六", "张七", "黑八爸爸");
        Stream<String> stream2 = Stream.of("110", "119", "114", "116", "115");
        //操作Steam流 ---> 过滤出姓张的元素
        //完整版写法
        // stream1.filter((String name)->{return name.startsWith("张");}).forEach((String name)->{System.out.println(name);});

        //简化写法 使用lambda省略规则
        // stream1.filter(name->name.startsWith("张")).forEach(name->System.out.println(name));

        //简化写法 使用方法引用规则省略
        // stream1.filter(name -> name.startsWith("张")).forEach(System.out::println);

        // 操作stream2流--->转换Integer类型,并跳过前2个,打印输出
        //完整版
        // stream2.map((String str) -> { return Integer.parseInt(str);}).skip(2).forEach(System.out::println);

        //简化版  使用方法引用的规则进行简化
        stream2.map(Integer::parseInt).skip(2).forEach(System.out::println);

        // 操作stream1流--->把姓名转换为Person对象,收集到集合中

        //完整版
        // List<person> list = stream1.map((String name) -> {return new person(name);}).collect(Collectors.toList());

        //简化版
        // List<person> list1 = stream1.map(person::new).collect(Collectors.toList());
        //打印集合中的元素
        // System.out.println(list);
        // System.out.println(list1);

        // 操作stream1流--->把姓名转换为姓名对应的字符长度,打印输出
        //完整版
        // stream1.map((String name)->{return name.length();}).forEach(System.out::println);
        //简化版
        stream1.map(String::length).forEach(System.out::println);

    }
}

小白一枚,喜欢编程,以上内容纯手打,如有错误,请及时指正,谢谢!!!

        欢迎下次再来ヾ(≧▽≦*)o
         
            求三连(❁´◡`❁)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Donne_CN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值