Stream流

生成方式
  • 生成流
    • 通过数据源(集合,数组等)生成流
    • list.stream()
  • 中间操作
    • 一个流后面可以跟随零个或多个中间操作,其主要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用
    • filter()
  • 终结操作
    • 一个流只能有一个终结操作,当这个操作执行后,无法再被操作
    • forEach()
常见生成方式
  • Collection体系的集合可以使用默认方法stream()生成流

    • default Stream stream()

    • ```java
      Stream setStream = set.stream();

      
      - Map体系的集合间接的生成流
      
      - ```java
      	Map<String,Integer> map = new HashMap<>();
      	Stream<String> keyStream = map.keySet().stream();
      	Stream<Integer> valueStream = map.values().stream();
      	Stream<Map.Entry<String,Integer>> entryStream = map.entrySet().stream();
  • 数组可以通过Stream接口的静态方法of(T…values)生成流

  •   String[] strArray = {"hello","world","java"};
      Stream<String> strArrayStream = Stream.of(strArray);
      Stream<String> strArrayStream2 = Stream.of("hello","world","java");
      Stream<Integer> intStream = Stream.of(10,20,30);
    
常见中间操作方法
  • Stream filter(Predicate predicate):用于对流中的数据进行过滤
    • Predicate接口中的方法 boolean test(T t):对给定的参数进行判断,返回一个布尔值
  • Stream limit(long maxSize):返回此流中的元素组成的流,截取前指定参数个数的数据
  • Stream skip(long n):跳过指定参数个数的数据,返回由该流的剩余元素组成的流
  • static Stream concat(Stream a,Stream b):合并a和b两个流为一个流
  • Stream distinct():返回由该流的不同元素(根据Object.equals(Object))组成的流
  • Stream sorted(Comparator comparator):返回由该流的元素组成的流,根据提供的Comparator进行排序,默认自然排序
  • Stream map(Function mapper):返回由给定函数应用于此流的元素的结果组成的流
    • Function接口的方法 R apply(T t)
  • IntStream mapToInt(ToIntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果
    • IntStream:表示原始int流
    • ToIntFunction接口中的方法 int applyAsInt(T value)
常见终结操作方法
  • void forEach(Consumer action) :对此流的每个元素执行操作
    • Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
  • long count():返此流中的元素数
Stream流收集操作

对数据使用Stream流的操作完毕后,数据收集到集合中

  • R collect(Collector collector)
  • 该收集方法参数是一个Collector接口

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

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