zoukankan      html  css  js  c++  java
  • Stream流与Optional类学习

    Stream流与Optional类

    Stream流:

    Stream类似NET的Linq表达式,可以对集合数据进行筛选、过滤和映射数据等一系列操作

    创建Stream流:

    1、通过Stream接口中的静态工厂创建:of、generator、iterate

    of方法:

    支持可变长参数创建

    支持与单一参数创建

    generate方法:

    生成一个无限长度的Stream,其元素的生成是通过给定的Supplier函数

    iterate方法:

    和generate一样也是生成一个无限长度Stream,和generate不同的是,iterate的入参为

    Stream<T> iterate(final T seed, final UnaryOperator<T> f)

    将seed作为入口,不断将结果放入第二个函数中,seed,f(seed),f(f(seed)),f(f(f(seed)))...

    例如:

    Stream.iterate(1, x -> x+1)
    最后生成的元素如下:1,2,3,4,5...

    注:使用generate和iterate方法时,一定要配合limit方法进行截断,否则会无线延长

    2、通过Collection接口中的默认方式创建:collection.stream()

    在Java8中接口引入了default标识符,可以为接口定义默认方法

    转换Stream流:

    1、distinct():

    去重操作,将Stream流转换成一个没有重复数据的新Stream,如果集合中自定义对象,必须重写hashCode和equals)

    2、limit(int maxSize):

    获取Stream流的前maxSize个元素转换成新Stream

    3、filter(Predicate<? super T> predicate):

    根据Predicate函数进行过滤操作,返回新Stream

    4、map(Function<? super T, ? extends R> mapper):

    对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素

    5、flatMap(Function<? super T, ? extends Stream<? extends R>> mapper):

    和map类似,不同的是其每个元素转换得到的都是Stream对象,会把一个个Stream中的元素压缩到父集合中

    6、peek(Consumer<? super T> action):

    生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer函数),新Stream每个元素被消费的时候都会执行给定的消费函数(只会消费被转换函数执行到的元素)

    7、skip(long n):

    返回一个丢弃原Stream的前N个元素后剩下元素组成的新Stream,如果原Stream中包含的元素个数小于N,那么返回空Stream

    匹配、聚合操作

    allMatch:接收一个 Predicate 函数,当流中每个元素都符合该断言时才返回true,否则返回false
    noneMatch:接收一个 Predicate 函数,当流中每个元素都不符合该断言时才返回true,否则返回false
    anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足该断言则返回true,否则返回false
    findFirst:返回流中第一个元素
    findAny:返回流中的任意元素
    count:返回流中元素的总个数
    max:返回流中元素最大值
    min:返回流中元素最小值

    收集操作

    collect(Collector<? super T, A, R> collector):

    接收一个Collector实例,将流中元素收集成另外一个数据结构

    例子:

    List<Integer> list = Arrays.asList(1,2,3,2,null,4,null,5);
    List<Integer> collect = list.stream().filter(x -> x != null).distinct().map(x -> x * 2).skip(2).limit(2).collect(Collectors.toList());
    最后collect的值为:[6, 8]

    Optional类:
    Optional 类主要解决的问题是空指针异常

    创建Optional对象

    1、Optional.of(T t):创建一个Optional实例,如果t为null,则会抛出异常

    2、Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例

    3、Optional.empty():创建一个空的 Optional 实例

    访问 Optional 对象的值

    1、get() :从 Optional 实例中取回实际值对象的方法

    判断是否包含值

    1、isPresent():判断是否有值,有值返回true,无值返回false

    2、ifPresent(Consumer<? super T> consumer):判断是否有值,如果有值就执行Consumer函数

    返回默认值

    1、orElse(T t):如果调用对象包含值,返回该值,否则返回t

    2、orElseGet(Supplier<? extends T> other):如果调用对象包含值,返回该值,否则返回 Supplier函数获取的值

    3、orElseThrow(Supplier<? extends X> exceptionSupplier):如果调用包含值,返回改值,否知执行Supplier抛出异常

    转换值

    1、map(Function<? super T, ? extends U> mapper):如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()

    2、flatMap(Function<? super T, Optional<U>> mapper):与 map 类似,要求返回值必须是Optional

    过滤值

    1、filter(Predicate<? super T> predicate):接受一个 Predicate参数,返回结果为 true 的值。如果结果全为 false,会返回一个空的 Optional

    团队五人,专业从事软件开发,接单工作,专注于Java,.Net,PHP
  • 相关阅读:
    C#连接数据库的三种方法
    远程控制mysql出现的问题
    DFS_子集
    DFS_全排列
    Centos下搭建Mysql
    Nginx与PHP(FastCGI)的安装、配置与优化
    Centos下主DNS的搭建
    Nginx的基本配置与优化
    Nginx服务器的安装与配置
    gdb基本命令
  • 原文地址:https://www.cnblogs.com/xiaohouye/p/14380571.html
Copyright © 2011-2022 走看看