package com.logicbig.example.longstream;
import java.util.Spliterator;
import java.util.stream.LongStream;
import java.util.stream.StreamSupport;
public class SpliteratorExample {
public static void main(String... args) {
Spliterator.OfLong s = LongStream.range(1, 10)
.spliterator();
Spliterator.OfLong s2 = s.trySplit();
LongStream stream1 = StreamSupport.longStream(s, false);
LongStream stream2 = StreamSupport.longStream(s2, false);
System.out.println(" -- first half --");
long sumOfTwice = stream1.peek(System.out::println)
.map(lg -> Math.multiplyExact(lg, 2))
.sum();
System.out.println(" -- second half --");
long sumOfSquared = stream2.peek(System.out::println)
.map(lg -> Math.multiplyExact(lg, lg))
.sum();
long totalSum = Math.addExact(sumOfTwice, sumOfSquared);
System.out.printf("--total sum --%n%s%n", totalSum);
}
}
Output
-- first half --
5
6
7
8
9
-- second half --
1
2
3
4
--total sum --
100
Parallel streams:
package com.logicbig.example.longstream;
import java.util.Spliterator;
import java.util.stream.LongStream;
import java.util.stream.StreamSupport;
public class SpliteratorExample2 {
public static void main(String... args) {
Spliterator.OfLong s = LongStream.range(1, 10)
.spliterator();
Spliterator.OfLong s2 = s.trySplit();
LongStream stream1 = StreamSupport.longStream(s, true);
LongStream stream2 = StreamSupport.longStream(s2, true);
System.out.println(" -- first half --");
long sumOfTwice = stream1.peek(System.out::println)
.map(lg -> Math.multiplyExact(lg, 2))
.sum();
System.out.println(" -- second half --");
long sumOfSquared = stream2.peek(System.out::println)
.map(lg -> Math.multiplyExact(lg, lg))
.sum();
long totalSum = Math.addExact(sumOfTwice, sumOfSquared);
System.out.printf("--total sum --%n%s%n", totalSum);
}
}
Output
-- first half --
9
8
7
6
5
-- second half --
3
4
1
2
--total sum --
100