IntStream 映射函数行为

我有一小段代码可以计算给定数组中的正值、负值和零值的数量。通过迭代数组并计算正值、负值和零值的数量,我可以使用 Java 7 轻松完成。但是对于Java 8流,在map函数中写入条件是否正确?目前此代码仅迭代一次并跳过数组的其余值。


static void calculatePositiveNegativeAndZero(int[] arr) {

    AtomicInteger positive = new AtomicInteger(0);

    AtomicInteger zero = new AtomicInteger(0);

    AtomicInteger negative = new AtomicInteger(0);

    int len = arr.length;

    Arrays.stream(arr)

            .parallel()

            .map(i -> i > 0 ? positive.getAndIncrement() : (i == 0 ? zero.getAndIncrement() : negative.getAndIncrement()));


    System.out.println(positive.doubleValue()/len);

    System.out.println(negative.doubleValue()/len);

    System.out.println(zero.doubleValue()/len);

}


慕侠2389804
浏览 162回答 3
3回答

慕仙森

您的流管道中没有终端操作,因此根本不应执行它。您可以使用forEach代替map:Arrays.stream(arr)        .parallel()        .forEach(i -> {             int k = i > 0 ? positive.getAndIncrement() : (i == 0 ? zero.getAndIncrement() : negative.getAndIncrement());        });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java