第16天 Stream流和方法引用

Stream流和方法引用

  • Stream流
    • 概念:生产流水线
    • 特点:
    • 获取流的两种方式
    • 常用方法
    • 代码联系

Stream流

概念:生产流水线

特点:

  • 流是一个接口
  • 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
  • 数据源流的来源。 可以是集合,数组 等。
  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent
    style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者增强for的方式, 显式的在集合外部进行迭代, 这叫做外部迭
    代。 Stream提供了内部迭代的方式,流可以直接调用遍历方法

获取流的两种方式

获取方式 集合 数组
Arr.stream() List.stream() Arrays.stream(arr)
Stream.of(Arr) Stream.of(list) Stream.of(arr)
  • 只有单列集合才能获取流
  • stream.of(数组) stream.of(1,2,3,4) stream流里存的是一个一个数组中的元素
  • stream.of(集合) 流里存的是一个集合
  • list.steam() 流里存的是及各中的元素

常用方法

  • 延迟方法:返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方
    法均为延迟方法。)
  • 终结方法:返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调
    用。本小节中,终结方法包括 count 和 forEach 方法
方法名称 返回值 描述
of stream 静态方法,Stream.of(集合)
concat stream 静态方法,Stream.concat(stream1,stream2)
forEach void 终结方法,consumer 逐个处理
count long 终结方法,返回流中的元素个数
filter stream predicate 保留过滤的元素
map stream functon 转换(映射)成要求的类型
limit stream stream 返回 保留前i个元素的stream )
skip stream 返回 跳过i个元素的stream
colleciton 返回对应的集合 Stream.collect(Collectors.toList) Stream转化成列表

代码联系

String[] names = {"lili","nana","luna"};
Stream.of(names).forEach(System.out::println);
取元素长度是4的集合
List<String> myList = list.stream().filter(s -> s.length() == 4).collect(Collectors.toList());
list.stream().filter(s->s.length()==4).forEach(s-> System.out.println(s));
Stream<String> stream3 = Stream.concat(stream1, stream2);
Arrays.stream(arr1).map(s->Integer.parseInt(s)).forEach(s-> System.out.println(s));
Stream<String> stream1 = one.stream().filter(s -> s.length() == 3).limit(3);
Stream<String> stream2 = two.stream().filter(s -> s.startsWith("张")).skip(2);
Stream<String> bigStream = Stream.concat(stream1, stream2);

你可能感兴趣的:(java)