可以使用如下方法创建Stream:
1)在Stream界面中使用静态工厂方法,
2)Iterable或Arrays上的流方法。
在Stream 接口中使用静态工厂方法
Java 8中新的java.util.stream.Stream
接口提供了几种用于创建流的静态方法。 具体来说,我们可以使用静态方法Stream.of
,Stream.iterate
和Stream.generate
。
static <T> Stream<T> of(T... values)
标准库中of方法的实现实际上委托给Arrays类中的stream方法
@SafeVarargs
public static<T> Stream<T> of(T... values) {
return Arrays.stream(values);
}
例子:
String days = Stream.of("monday", "tuesday", "wednesday")
.collect(Collectors.joining(","));
System.out.println(days);
// prints monday,tuesday,wednesday
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f)
根据Javadocs,此方法“返回通过将函数f迭代应用到初始元素种子而生成的无限、有序的Stream”。
List<BigDecimal> nums =
Stream.iterate(BigDecimal.ONE, n -> n.add(BigDecimal.ONE) )
.limit(10)
.collect(Collectors.toList());
System.out.println(nums);
// prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Stream.iterate(LocalDate.now(), ld -> ld.plusDays(1L))
.limit(10)
.forEach(System.out::println)
// prints 10 days starting from today
static <T> Stream<T> generate(Supplier<T> s)
此方法通过反复调用 Supplier 来产生无序的 Stream。
long count = Stream.generate(Math::random).limit(10)
.forEach(System.out::println)
Using range
and rangeClosed
Stream有三个专门用于基元的子接口:IntStream,LongStream和DoubleStream。
IntStream和LongStream有两个额外的工厂方法,用于创建Stream,range和rangeClosed。
static IntStream range(int startInclusive, int endExclusive)
static IntStream rangeClosed(int startInclusive, int endInclusive) static LongStream range(long startInclusive, long endExclusive)
static LongStream rangeClosed(long startInclusive, long endInclusive)
Iterable或Arrays上的steam方法
如果已经有了一个集合,可以利用Collection接口的默认方法
List<String> bradyBunch = Arrays.asList("Greg", "Marcia", "Peter", "Jan",
"Bobby", "Cindy");
names = bradyBunch.stream()
.collect(Collectors.joining(","));
System.out.println(names);
总结
Stream.of(T... values)
和 Stream.of(T t)
Arrays.stream(T[] array)
以及 int[], double[] 和long[] 的重载
Stream.iterate(T seed, UnaryOperator<T> f)
Stream.generate(Supplier<T> s)
- 使用
range
和 rangeClosed
:
-
IntStream.range(int startInclusive, int endExclusive)
-
IntStream.rangeClosed(int startInclusive, int endInclusive)
-
LongStream.range(long startInclusive, long endExclusive)
-
LongStream.rangeClosed(long startInclusive, long endInclusive)
Collection.stream()
评论