import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class UrutanParalel {

    public static void main(String[] args) {
        List<Integer> data = IntStream.rangeClosed(1, 12).boxed().toList();

        // forEachOrdered: elemen diproses paralel, aksi dijalankan
        // mengikuti encounter order satu per satu
        System.out.print("forEachOrdered = ");
        data.parallelStream().forEachOrdered(n -> System.out.print(n + " "));
        System.out.println();

        // collect pada stream paralel tetap menjaga urutan hasil
        List<Integer> kuadrat = data.parallelStream()
            .map(n -> n * n)
            .collect(Collectors.toList());
        System.out.println("collect        = " + kuadrat);

        // findFirst pada stream paralel tetap menghormati encounter order
        System.out.println("findFirst      = " + data.parallelStream().filter(n -> n > 7).findFirst());
    }
}
