Stream流思想

创建一条流水线,在流水线上有各种各样的操作,最后将剩余的数据全部输出。
具有获取Stream流方法,中间方法,终结方法。

Stream流的获取

单列集合:集合对象.stream()
双列集合:不能直接获取,需要间接获取
集合对象.keySet().stream()
集合对象.entrySet.stream()
数组:Arrays.stream(数组名)
同种数据类型的多个数据:stream.of(数据1,数据2,数据3....)

Stream流的常见中间操作方法

Stream<T> filter(Predicate predicate):用于对流中的数据进行过滤
Predicate接口中的方法
boolean test(T t):对给定的参数进行判断,返回一个布尔值
过程:

  1. filter方法获取流中的每一个数据
  2. 而test方法中的s,就依次表示流中的每一个数据
  3. 我们只要在test方法中对s进行判断就可以了
  4. 如果判断的结果为true,则当前的数据留下
  5. 如果判断的结果为false,则当前数据就不要
  • Stream<T> limit(long maxSize):截取前指定参数个数的数据
  • Stream<T> skip(long n):跳过前指定参数个数的数据
  • static<T> Stream<T> concat(Stream a,Stream b):合并a和b两个流为一个流,a在前,b在后。
  • Stream<T> distinct():去除流中重复的元素。依赖(hashCode和equals方法)

    Stream流的常见终结操作方法

  • void forEach(Consumer action):对此流的每个元素执行操作
    Consumer接口中的方法 void accept(T t):对给定的参数执行此操作

  • long count():返回此流中的元素数

    Stream流的收集操作

    在Stream流中无法直接修改集合,数组等数据源中的数据。
    Stream流的收集方法

  • R collect(Collector collector)

工具类Collectors提供了具体的收集方式

  • public static <T> Collector toList():把元素收集到List集合中
  • public static <T> Collector toSet():把元素收集到Set集合中
  • public static Collector toMap(Function keyMapper, Function valueMapper):把元素收集到Map集合中

Function keyMapper:一个Lambda表达式,描述如何获取到Map中的键
Function valueMapper:另一个Lambda表达式,描述如何获取到Map中的值