package com.insightfullogic.java8.examples.chapter6; import org.openjdk.jmh.Main; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.RunnerException; import java.io.IOException; import java.util.*; import java.util.stream.IntStream; import java.util.stream.Stream; import static java.util.stream.Collectors.toList; @State(Scope.Benchmark) @BenchmarkMode(Mode.AverageTime) public class IntegerSum { public static void main(String[] ignore) throws IOException, RunnerException { final String[] args = { ".*IntegerSum.*", "-wi", "10", "-i", "20", "-f", "1" }; Main.main(args); } private static final int size = Integer.getInteger("sum.size", 1000000); public int[] array; public List<Integer> arrayList; public LinkedList<Integer> linkedList; public TreeSet<Integer> treeSet; public HashSet<Integer> hashSet; @Setup public void createDataSources() { array = IntStream.range(0, size).toArray(); arrayList = numbers().collect(toList()); linkedList = new LinkedList<>(arrayList); treeSet = new TreeSet<>(arrayList); hashSet = new HashSet<>(arrayList); } private Stream<Integer> numbers() { return IntStream.range(0, size).mapToObj(i -> i); } @GenerateMicroBenchmark public int range() { return IntStream.range(0, size).parallel().sum(); } @GenerateMicroBenchmark public int serialRange() { return IntStream.range(0, size).sum(); } @GenerateMicroBenchmark public int array() { return IntStream.of(array).parallel().sum(); } @GenerateMicroBenchmark public int arrayList() { return arrayList.parallelStream().mapToInt(i -> i).sum(); } // BEGIN addIntegers private int addIntegers(List<Integer> values) { return values.parallelStream() .mapToInt(i -> i) .sum(); } // END addIntegers @GenerateMicroBenchmark public int linkedList() { return linkedList.parallelStream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int treeSet() { return treeSet.parallelStream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int hashSet() { return hashSet.parallelStream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int serialArray() { return IntStream.of(array).sum(); } @GenerateMicroBenchmark public int serialArrayList() { return arrayList.stream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int serialLinkedList() { return linkedList.stream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int serialTreeSet() { return treeSet.stream().mapToInt(i -> i).sum(); } @GenerateMicroBenchmark public int serialHashSet() { return hashSet.stream().mapToInt(i -> i).sum(); } }