trick to iterate stream with index

with an `AtomicInteger`, it could provide an index while traversing the stream of java collections.

        final int partition = 100;
        final AtomicInteger counter = new AtomicInteger();

        final ForkJoinTask<Integer> task = factorThreads.submit(() ->
                numbers.stream()
                        .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / partition))
                        .values()
                        .stream().map(integers -> {
                            log.info("check the list {}", integers);
                            return integers.size();
                }).reduce(0, Integer::sum)
        );
        if(task.join() != 1200)
            log.error("the number is not tally");
        else log.error("all 1200 numbers counted");

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s