package com.insightfullogic.java8.examples.chapter6;
import com.insightfullogic.java8.examples.chapter1.Album;
import com.insightfullogic.java8.examples.chapter1.SampleData;
import com.insightfullogic.java8.examples.chapter1.Track;
import org.openjdk.jmh.Main;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.RunnerException;
import java.io.IOException;
import java.util.List;
import java.util.stream.IntStream;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
public class ArraySum {
public static void main(String[] ignore) throws IOException, RunnerException {
final String[] args = {
".*ArraySum.*",
"-wi",
"5",
"-i",
"5"
};
Main.main(args);
}
public List<Album> albums;
@Setup
public void initAlbums() {
int n = Integer.getInteger("arraysum.size", 1000);
albums = IntStream.range(0, n)
.mapToObj(i -> SampleData.aLoveSupreme.copy())
.collect(toList());
}
@GenerateMicroBenchmark
// BEGIN serial
public int serialArraySum() {
return albums.stream()
.flatMap(Album::getTracks)
.mapToInt(Track::getLength)
.sum();
}
// END serial
@GenerateMicroBenchmark
// BEGIN parallel
public int parallelArraySum() {
return albums.parallelStream()
.flatMap(Album::getTracks)
.mapToInt(Track::getLength)
.sum();
}
// END parallel
}