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类

Java IntStream类是int原语的“Stream”接口的特殊化。它表示支持顺序和并行聚合操作的原始int值元素流。

IntStreamjava.util.stream包的一部分,实现了 AutoCloseableBaseStream接口。

日期:2020-09-17 00:09:36 来源:oir作者:oir