Java创建流

示例

所有javaCollection<E>都具有stream()和可以构造parallelStream()a的方法Stream<E>:

Collection<String> stringList = new ArrayList<>();
Stream<String> stringStream = stringList.parallelStream();

阿Stream<E>可以使用以下两种方法之一的阵列创建:

String[] values = { "aaa", "bbbb", "ddd", "cccc" };
Stream<String> stringStream = Arrays.stream(values);
Stream<String> stringStreamAlternative = Stream.of(values);

和之间的区别是具有varargs参数,因此可以像这样使用:Arrays.stream()Stream.of()Stream.of()

Stream<Integer> integerStream = Stream.of(1, 2, 3);

Stream您还可以使用原始元素。例如:

IntStream intStream = IntStream.of(1, 2, 3);
DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0);

这些原始流也可以使用以下方法构造:Arrays.stream()

IntStream intStream = Arrays.stream(new int[]{ 1, 2, 3 });

可以Stream从具有指定范围的数组创建一个。

int[] values= new int[]{1, 2, 3, 4, 5};
IntStream intStram = Arrays.stream(values, 1, 3);

请注意,任何原始流都可以使用boxed方法转换为盒装类型流:

Stream<Integer> integerStream = intStream.boxed();

如果您想收集数据,这在某些情况下很有用,因为原始流没有任何collect采用Collectoras作为参数的方法。

重用流链的中间操作

调用终端操作时,流将关闭。当仅终端操作仅在变化时重用中间操作流。我们可以创建一个流供应商来构建一个已经设置了所有中间操作的新流。

Supplier<Stream<String>> streamSupplier = () -> Stream.of("apple", "banana","orange", "grapes", "melon","blueberry","blackberry")
.map(String::toUpperCase).sorted();

  streamSupplier.get().filter(s ->   s.startsWith("A")).forEach(System.out::println);

// 苹果

  streamSupplier.get().filter(s -> s.startsWith("B")).forEach(System.out::println);

  // 香蕉
  // 黑莓
  // 蓝莓

int[]数组可以转换为List<Integer>使用流

int[] ints = {1,2,3};
List<Integer> list = IntStream.of(ints).boxed().collect(Collectors.toList());