on it road.com
如何遍历 IntStream
要循环遍历元素,流支持 forEach() 操作。
import java.util.stream.IntStream;
public class ForEachExample
{
public static void main(String[] args)
{
//Simple for-loop
for(int i=0; i < 5; i++)
{
doSomething(i);
}
//IntStream forEach
IntStream.rangeClosed(0, 4)
.forEach( ForEachExample::doSomething );
}
private static void doSomething(int i) {
System.out.println(i);
}
}
过滤 IntStream 流
我们可以对流产生的 int 值应用过滤,并在另一个函数中使用它们或者收集它们以进行进一步处理。
例如,我们可以迭代 int 值并过滤/收集所有质数。
import java.util.List;
import java.util.function.IntPredicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class FilterExample
{
public static void main(String[] args)
{
IntStream stream = IntStream.range(1, 100);
List<Integer> primes = stream.filter(FilterExample::isPrime)
.boxed()
.collect(Collectors.toList());
System.out.println(primes);
}
public static boolean isPrime(int i)
{
IntPredicate isDivisible = index -> i % index == 0;
return i > 1 && IntStream.range(2, i).noneMatch(isDivisible);
}
}
Java 创建 IntStream
有多种创建 IntStream的方法。
使用IntStream.of()创建 IntStream
此函数返回一个顺序有序的流,其元素是指定的值。
它有两个版本,例如:单元素流和多值流
IntStream of(int t)- 返回包含单个指定元素的流。IntStream of(int... values)- 返回包含指定所有元素的流。
IntStream.of(10); //10 IntStream.of(1, 2, 3); //1,2,3
使用 IntStream.range() 和 IntStream.rangeClosed()
这些函数将在后面的第 (3) 节中更详细地讨论。
在这个方法中,我们提供了一个值范围(范围的开始和结束),然后函数返回从开始值到结束值的所有 int 值。
IntStream.range(1, 5); //1,2,3,4,5
使用 IntStream.iterate()
iterator()函数对于创建无限流很有用。
此外,我们可以使用此方法来生成值按 1 以外的任何其他值递增的流。
给定的示例生成从 0 开始的前 10 个偶数。
IntStream.iterate(0, i -> i + 2).limit(10); //0,2,4,6,8,10,12,14,16,18
使用IntStream.generate()
generate()看起来很像 iterator(),但不同之处在于不通过增加前一个值来计算 int 值。
而是提供了一个 IntSupplier,它是一个功能接口,用于生成一个无限连续的无序 int 值流。
以下示例创建 10 个随机数的流,然后在控制台中打印它们。
IntStream stream = IntStream.generate(()
-> { return (int)(Math.random() * 10000); });
stream.limit(10).forEach(System.out::println);
Java IntStream类是int原语的“Stream”接口的特殊化。它表示支持顺序和并行聚合操作的原始int值元素流。
IntStream是 java.util.stream包的一部分,实现了 AutoCloseable和 BaseStream接口。
日期:2020-09-17 00:09:36 来源:oir作者:oir
