17-案例实现
案例实现
按照如下步骤来实现本案例。
1.创建 Main 类和 main() 方法,并在类中定义两个属性,它们分别是 AtomicInteger 类型的 counter 和 Random 类型的 random :
public class Main {
public static void main(String[] args) {
AtomicLong counter = new AtomicLong(0);
Random random=new Random();
2.创建一个包含1000个双精度型的随机数流,不过所创建的流是一个线性流,因此需要用 parallel() 方法把流并行化,再然后通过 peek() 方法递增 counter 上的值并输出相关信息到控制台中。之后,通过 count() 方法计算数组中的元素数量并把统计结果用整型变量 counter 来存储,在控制台中分别输出由 count() 方法返回的值和 counter 变量中存储的值:
long streamCounter = random.doubles(1000).parallel()
.peek( number -> {
long actual=counter.incrementAndGet();
System.out.printf("%d - %f\n", actual, number);
}).count();
System.out.printf("Counter: %d\n", counter.get());
System.out.printf("Stream Counter: %d\n", streamCounter);
3.现在,把变量 counter 设置为0,另外创建1000个随机浮点数,通过 parallel() 方法把这些数字转成并行流,并通过 peek() 方法增加 counter 变量的值,在控制台中输出其他相关信息。最后,用 forEach() 方法在控制台中输出所有的数和 counter 变量中的值:
counter.set(0);
random.doubles(1000).parallel().peek(number -> {
long actual=counter.incrementAndGet();
System.out.printf("Peek: %d - %f\n", actual,number);
}).forEach( number -> {
System.out.printf("For Each: %f\n", number);
});
System.out.printf("Counter: %d\n", counter.get());
}
}