收集Stream流

Stream流的收集操作

  • 收集Stream流的含义:就是把Stream流操作后的结果数据 转回集合 或者 数组 中去。
  • Stream流:方便操作 集合 / 数组 的 手段
  • 集合 / 数组:才是开发中的 目的

Stream流的收集方法

  • R collect(Collector  collector)
  • 开始收集Stream流,指定收集器
  • Object [ ]        toArray()
  • 返回包含此流元素的数组,这是一个终端操作。
  • 返回:一个数组,其运行时组件类型为Object,包含此流的元素
  • 使用提供的生成器函数来分配返回的数组,以及分区执行或调整大小可能需要的任何其他数组,返回包含此流元素的数组
  • 这是一个终端操作
  • 参数:生成器——一个生成所需类型和提供长度的新数组的函数
  • 返回:包含此流中元素的数组
  • 抛出:ArrayStoreException——如果流中任何元素的运行时类型不能赋值给生成数组的运行时组件类型
  • API注意:生成器函数接受一个整数,即所需数组的大小,并生成所需大小的数组,这可以用一个数组构造函数引用来间接地表达:
  • default  List   toList(){ return  (List)Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())))}
  • 将此流的元素累加到List中,列表中的元素将按照该流的相遇顺序(如果存在的话)排列,返回的 List不可修改 的;调用任何mutator方法总是会导致抛出UnsupportedOperationException,不能保证返回的 List 的实现类型或可序列化性。
  • 返回的实例可以基于值,调用者不应该对返回实例的身份做任何假设,对这些实例的身份敏感操作(引用相等性(==)、身份散列码 和 同步)是不可靠的,应该避免。这是一个终端操作。
  • 返回:包含流元素的List
  • API注意:如果需要对返回对象进行更多的控制,请使用Collectors.toCollection(Supplier)
  • 实施要求:这个接口的实现返回一个List,就像下面的操作一样 Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())))
  • 实现注意:Stream的大多数实例将覆盖此方法,并提供与此接口中的实现相比高度优化的实现
  • 自JDK 16 起 

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

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

收集Stream流的作用?

  • Stream流是操作 集合 / 数组的手段
  • 操作的结果数据最终要恢复到集合或者数组中去
package com.csdn.streamcollect;

import java.util.*;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamCollectors {
    public static void main(String[] args) {

        List list = new ArrayList<>();

        Collections.addAll(list, "张三丰", "张翠山", "张无忌", "赵敏", "周芷若");

//        Stream stringStream = list.stream().filter(new Predicate() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张");
//            }
//        });

        Stream stringStream = list.stream().filter(s -> s.startsWith("张"));

        List collect = stringStream.collect(Collectors.toList());
        System.out.println(collect);//[张三丰, 张翠山, 张无忌]

        List list1 = list.stream().toList();
        System.out.println(list1);//[张三丰, 张翠山, 张无忌, 赵敏, 周芷若]

        Stream stringStream1 = list.stream().filter(s -> s.startsWith("张"));
        Set collect1 = stringStream1.collect(Collectors.toSet());
        System.out.println(collect1);//[张翠山, 张三丰, 张无忌]

        Stream stringStream2 = list.stream().filter(s -> s.startsWith("张"));
//        Object[] array = stringStream2.toArray();
//        System.out.println(Arrays.toString(array));//[张三丰, 张翠山, 张无忌]

//        Stream.of(array).forEach(System.out::println);
//                                                                张三丰
//                                                                张翠山
//                                                                张无忌

//        String[] array = stringStream2.toArray(new IntFunction() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });

        String[] array = stringStream2.toArray(String[]::new);

        Stream.of(array).forEach(System.out::println);
//                                                                 张三丰
//                                                                 张翠山
//                                                                 张无忌

    }
}

你可能感兴趣的:(#,Stream,Collectors,toList(),toSet(),Stream,collect(),toArray(),toList)