栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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;


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;


public class Test {
    public static void main(String[] args) {
        //获取流
        Stream stream1 = Stream.of("张三三", "李四四", "王五", "赵六", "张七", "黑八爸爸");
        Stream 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 list = stream1.map((String name) -> {return new person(name);}).collect(Collectors.toList());

        //简化版
        // List 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
         
            求三连(❁´◡`❁)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号