Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。

1) 增加单个参数构造方法,可为null

Stream.ofNullable(null).count(); // 0

2) 增加 takeWhile 和 dropWhile 方法

Stream.of(1, 2, 3, 2, 1)

.takeWhile(n -> n < 3)

.collect(Collectors.toList()); // [1, 2]

从开始计算,当 n < 3 时就截止。

Stream.of(1, 2, 3, 2, 1)

.dropWhile(n -> n < 3)

.collect(Collectors.toList()); // [3, 2, 1]

这个和上面的相反,一旦 n < 3 不成立就开始计算。

3)iterate重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

举个例子:

  1. import java.util.stream.Stream;
  2. import org.junit.Test;
  3. /**
  4. * 流的处理
  5. * 1) 创建流
  6. * 2) 中间操作
  7. * 3) 终止操作
  8. */
  9. public class StreamTest {
  10. @Test
  11. public void test3() {
  12. // 流的迭代, 创建流
  13. Stream<Integer> stream1 = Stream.iterate(1, t -> (2 * t) + 1);
  14. stream1.limit(10).forEach(System.out::println);
  15. System.out.println("*************************");
  16. // 有限的迭代
  17. Stream<Integer> stream2 = Stream.iterate(1, t -> t < 1000, t -> (2 * t) + 1);
  18. stream2.forEach(System.out::println);
  19. }
  20. @Test
  21. public void test2() {
  22. Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40, 7);
  23. // 新方法, takeWhile, dropWhile
  24. // 从流中一直获取判定器为真的元素, 一旦遇到元素为假, 就终止处理.
  25. Stream<Integer> stream2 = stream1.takeWhile(t -> t % 2 != 0);
  26. stream2.forEach(System.out::println);
  27. System.out.println("**********************");
  28. stream1 = Stream.of(3, 9, 20, 22, 40, 7);
  29. Stream<Integer> stream3 = stream1.dropWhile(t -> t % 2 != 0);
  30. stream3.forEach(System.out::println);
  31. }
  32. @Test
  33. public void test1() {
  34. Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40);
  35. //stream1.forEach(t -> System.out.println(t));
  36. stream1.forEach(System.out::println);
  37. System.out.println("***********************************");
  38. Stream<Object> stream2 = Stream.of(); // 流中没有数据
  39. stream2.forEach(System.out::println);
  40. System.out.println("***********************************");
  41. // 传入null会被解析为是一个数组对象, 会进一步访问它的长度信息
  42. //Stream<Object> stream3 = Stream.of(null);
  43. //stream3.forEach(System.out::println);
  44. // 可以传入 一个null来创建流对象
  45. Stream<Object> stream3 = Stream.ofNullable(null);
  46. stream3.forEach(System.out::println);
  47. }
  48. }

版权声明:本文为androidsuperman原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/androidsuperman/p/10350871.html