zoukankan      html  css  js  c++  java
  • Java8的学习笔记

    Java8看书笔记

    Stream

    Stream.of("d2", "a2", "b1", "b3", "c")
    .filter(s -> {
    System.out.println("filter: " + s);
    return true;
    });

    不会打印任何东西,因为filter是衔接操作,延迟性,只会在终止操作调用时被执行。 

    Stream.of("d2", "a2", "b1", "b3", "c")
    .filter(s -> {
    System.out.println("filter: " + s);
    return true;
    })
    .forEach(s -> System.out.println("forEach: " + s)); 

    原始方法会在数据流的所有元素 衔接【中间】操作:
    - filter:过滤 - sorted:不会改变原来集合中的元素排序 - map:把流对象中的每一个对象对应到另外一个对象上

    中止操作 - foreach:遍历所有的对象 - match:用来判断某一种规则是否与流对象相互匹配 - count:返回当前对象的个数 - reduce:通过某方法,对元素进行削减操作

    函数式接口

    lambda表达式匹配Java的类型系统:每个lambda都能通过一个特定的接口,与一个给定的类型进行匹配。一个所谓的函数式接口必须要有且仅有必须要与抽象方法的声明相匹配。

    Lambda的范围

    能访问局部对应的外部区域的局部final变量,以及成员变量和静态变量

    Predicates

    布尔类型的函数

    Functions

    Function接口接收一个参数,并返回单一的结果,默认方法可以将多个函数串在一起

    Suppliers

    产生一个给定类型的结果,没有输入参数

    Consumers

    在一个输入参数上进行的操作

    Optionals

    防止NPE,简单的值容器

    数据流怎么工作

    1. 衔接操作有延迟性,在终止操作时调用时被执行
    Stream.of("d2", "a2", "b1", "b3", "c")
    .filter(s -> {
    System.out.println("filter: " + s);
    return true;
    })
    .forEach(s -> System.out.println("forEach: " + s));
    // 输出结果
    filter: d2
    forEach: d2
    filter: a2
    forEach: a2
    filter: b1
    forEach: b1
    filter: b3
    forEach: b3
    filter: c
    forEach: c

    原始方法在数据流的所有元素上,一个接一个地水平执行所有操作,但是每个元素在调用链上垂直移动。
    sorted操作时水平移动,言而总之,总而言之,就是要把filter写在前面。

    collect

    有用的终止操作,将流中的元素存放在不同类型的结果中,collect接受收集器(collector),由4个操作组成: - supplier - accumlator - combiner - finisher

    Java8实现了多种内置收集器,在Collectors中.Collectors.toMap(); .collect(Collectors.toList());

    构建自己的特殊收集器

    使用Collector.of(),需要传递一个收集器的四个组成部分:供应器,累加器,组合器和终止器 

    Collector<Person, StringJoiner, String>   personNameColector = 
    Collect.of(
    () -> new StringJoiner(" | "), // suppiler
    (j, p) -> j.add(p.name.toUpperCase()), // accumulator
    (j1,j2) -> j1.merge.(j2), // combiner
    StringJoiner::toString); // finisher
    
    // 使用方法
    String names = persons.stream.collect(personNameColector)

    flatMap

    map:将一个流中的对象转成另一种类型,只能映射成一个其他的对象
    flatMap的作用:将流中的每个元素,转换成其他对象的流,可以转换成多个或者零个其他对象
    optional:返回一个Optional或其他类型的对象,所以它可以用于避免null检查

  • 相关阅读:
    VSCode创建自定义代码段
    生命不息,折腾不止 ~ 旧PC改造之家庭影音
    万物互联之~网络编程基础篇
    PyCharm创建自定义代码段(JetBrains系列通用)
    VSCode设置Tab键为4个空格
    Jupyter-Notebook服务器自定义密码
    Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
    centos下使用nohup
    在centos中创建nginx启动脚本
    查看centos中的用户和用户组
  • 原文地址:https://www.cnblogs.com/Gabby/p/10307180.html
Copyright © 2011-2022 走看看