#Stream练习 当你使用Stream时,你会通过三个阶段来建立一个操作流水线。
- 创建一个Stream
- 在一个或多个步骤中,指定将初始化Stream转换为另一个Stream的中间操作。
- 使用一个终止操作来产生一个结果。该操作会强制它之前的延迟操作立即执行。在这之后,该Stream就不会再被使用了。 如示例中,通过Stream或者parallelStream方法来创建Stream,再通过filter方法对其进行转换,而count就是终止操作。
示例:long count = words.parallelStream().filter(w -> w.length()>12).count();
创建Stream
通过Java8在Collection接口中新添加的stream方法,可以将任何集合转化为一个Stream。 如Stream<String > song = Stream.of("gently", "down", "the", "stream");
filter、map和flatMap方法
流转化是指从一个流中读取数据,并将转换后的数据写入到另一个流中。 Stream<String> lowcaseWords = words.stream().map(String::toLowerCase);
提取子流和组合流
Stream.limit(n)会返回一个包含n个元素的新流,用于裁剪指定长度的流。 Stream.skip(n)正好相反,会丢弃掉前面的n个元素。 可以用Stream类的concat将两个流连接到一起。
有状态的转换
如distinct方法,Sorted方法。
简单的聚合方法
聚合方法都是终止操作。 count方法,max和min方法。anyMatch方法,allMatch方法和noneMatch方法。
Optional类型
高效使用Optional的关键在于,使用一个或者接受正确值、或者返回另一个替代值得方法。 当一个可选值存在时应该如何对它进行优雅的进行处理。 当没有值存在时,产生一个替代值。 int aInt = a.orElse(8);
创建可选值
Optional.of()或者Optional.empty()来创建一个Optional对象。 public static Optional<Double> inverse(Double x){ return x == 0 ? Optional.empty() : Optional.of(1/x); }