From dfd26e8168e41574dfbb9df1515bba35a9aeaa1c Mon Sep 17 00:00:00 2001 From: Gunnar Morling Date: Tue, 2 Jan 2024 20:07:39 +0100 Subject: Evaluating itaske's submission --- .../morling/onebrc/CalculateAverage_itaske.java | 76 ++++++++++++++++++++++ .../morling/onebrc/CalculateAverage_patrick.java | 76 ---------------------- 2 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java delete mode 100644 src/main/java/dev/morling/onebrc/CalculateAverage_patrick.java (limited to 'src/main/java/dev/morling') diff --git a/src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java b/src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java new file mode 100644 index 0000000..9e13701 --- /dev/null +++ b/src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java @@ -0,0 +1,76 @@ +/* + * Copyright 2023 The original authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package dev.morling.onebrc; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.AbstractMap; +import java.util.Comparator; +import java.util.Map; +import java.util.concurrent.ConcurrentSkipListMap; +import java.util.stream.Collectors; + +public class CalculateAverage_itaske { + + private static final String FILE = "./measurements.txt"; + + private record Measurement(long count, double sum, double min, double max) { + + Measurement(double value) { + this(1, value, value, value); + } + + + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(round(min)); + builder.append("/"); + builder.append(round(sum/count)); + builder.append("/"); + builder.append(round(max)); + + return builder.toString(); + } + + private double round(double value) { + return Math.round(value * 10.0) / 10.0; + } + } + + public static void main(String[] args) throws IOException { + + Map resultMap = Files.lines(Path.of(FILE)).parallel() + .map(line -> { + int separatorIndex = line.indexOf(";"); + String key = line.substring(0, separatorIndex); + double value = Double.parseDouble(line.substring(separatorIndex + 1)); + return new AbstractMap.SimpleEntry<>(key, value); + }) + .collect(Collectors.toConcurrentMap( + entry -> entry.getKey(), + entry -> new Measurement(entry.getValue()), + ((measurement1, measurement2) -> new Measurement( + measurement1.count + measurement2.count, + measurement1.sum + measurement2.sum, + Math.min(measurement1.min, measurement2.min), + Math.max(measurement1.max, measurement2.max))))); + + System.out.print( + resultMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).map(Object::toString).collect(Collectors.joining(", ", "{", "}"))); + + } +} diff --git a/src/main/java/dev/morling/onebrc/CalculateAverage_patrick.java b/src/main/java/dev/morling/onebrc/CalculateAverage_patrick.java deleted file mode 100644 index 298a437..0000000 --- a/src/main/java/dev/morling/onebrc/CalculateAverage_patrick.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2023 The original authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package dev.morling.onebrc; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.AbstractMap; -import java.util.Comparator; -import java.util.Map; -import java.util.concurrent.ConcurrentSkipListMap; -import java.util.stream.Collectors; - -public class CalculateAverage_patrick { - - private static final String FILE = "./measurements.txt"; - - private record Measurement(long count, double sum, double min, double max) { - - Measurement(double value) { - this(1, value, value, value); - } - - - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(round(min)); - builder.append("/"); - builder.append(round(sum/count)); - builder.append("/"); - builder.append(round(max)); - - return builder.toString(); - } - - private double round(double value) { - return Math.round(value * 10.0) / 10.0; - } - } - - public static void main(String[] args) throws IOException { - - Map resultMap = Files.lines(Path.of(FILE)).parallel() - .map(line -> { - int separatorIndex = line.indexOf(";"); - String key = line.substring(0, separatorIndex); - double value = Double.parseDouble(line.substring(separatorIndex + 1)); - return new AbstractMap.SimpleEntry<>(key, value); - }) - .collect(Collectors.toConcurrentMap( - entry -> entry.getKey(), - entry -> new Measurement(entry.getValue()), - ((measurement1, measurement2) -> new Measurement( - measurement1.count + measurement2.count, - measurement1.sum + measurement2.sum, - Math.min(measurement1.min, measurement2.min), - Math.max(measurement1.max, measurement2.max))))); - - System.out.print( - resultMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).map(Object::toString).collect(Collectors.joining(", ", "{", "}"))); - - } -} -- cgit v1.2.3