From 949863d8b490c84901fd8e85bf5e8feb0246d4eb Mon Sep 17 00:00:00 2001 From: Graham Kirby Date: Thu, 28 Nov 2024 09:11:13 +0000 Subject: [PATCH] Tidying. --- .../grahamkirby/race_timing/common/Race.java | 4 +- .../race_timing/common/RacePrizes.java | 2 +- .../race_timing/common/output/RaceOutput.java | 2 +- .../individual_race/IndividualRace.java | 14 ++---- .../race_timing/relay_race/RelayRace.java | 18 ++++--- .../race_timing/series_race/SeriesRace.java | 2 +- .../fife_ac_grand_prix/GrandPrixRace.java | 47 ++----------------- .../fife_ac_midweek/MidweekRace.java | 2 +- 8 files changed, 22 insertions(+), 69 deletions(-) diff --git a/src/main/java/org/grahamkirby/race_timing/common/Race.java b/src/main/java/org/grahamkirby/race_timing/common/Race.java index 52802aaa..acc85657 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/Race.java +++ b/src/main/java/org/grahamkirby/race_timing/common/Race.java @@ -445,7 +445,7 @@ private List getPrizeCategoryGroups(final Path prize_categor Files.readAllLines(prize_categories_path).stream(). filter(line -> !line.startsWith(COMMENT_SYMBOL)). - forEach(line -> { + forEachOrdered(line -> { final String group_name = line.split(",")[5]; addGroupIfAbsent(groups, group_name); @@ -494,7 +494,7 @@ private Map loadImportCategoryMap(final String path_key, final S Files.readAllLines(category_map_path).stream(). filter(line -> !line.startsWith(COMMENT_SYMBOL)). - forEach(line -> { + forEachOrdered(line -> { if (entry_column_map_string == null) diff --git a/src/main/java/org/grahamkirby/race_timing/common/RacePrizes.java b/src/main/java/org/grahamkirby/race_timing/common/RacePrizes.java index 0127f3ff..daaaa55d 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/RacePrizes.java +++ b/src/main/java/org/grahamkirby/race_timing/common/RacePrizes.java @@ -75,7 +75,7 @@ public void setPrizeWinners(final PrizeCategory category) { race.getOverallResults().stream(). filter(_ -> position.get() <= category.numberOfPrizes()). filter(result -> prizeWinner(result, category)). - forEach(result -> { + forEachOrdered(result -> { setPrizeWinner(result, category); position.getAndIncrement(); }); diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java index efb290d0..65d64363 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java @@ -163,7 +163,7 @@ protected void printPrizes(final Function prize_printer) { race.prize_category_groups.stream(). flatMap(group -> group.categories().stream()). filter(race.prizes::prizesInThisOrLaterCategory). - forEach(prize_printer::apply); + forEachOrdered(prize_printer::apply); } private void printPrizes(final OutputStreamWriter writer, final PrizeCategory category) throws IOException { diff --git a/src/main/java/org/grahamkirby/race_timing/individual_race/IndividualRace.java b/src/main/java/org/grahamkirby/race_timing/individual_race/IndividualRace.java index 43cc79b5..0943b608 100644 --- a/src/main/java/org/grahamkirby/race_timing/individual_race/IndividualRace.java +++ b/src/main/java/org/grahamkirby/race_timing/individual_race/IndividualRace.java @@ -32,7 +32,6 @@ import java.nio.file.Paths; import java.util.Comparator; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; public class IndividualRace extends SingleRace { @@ -112,7 +111,7 @@ protected void initialiseResults() { entries.stream(). map(entry -> (IndividualRaceEntry)entry). map(entry -> new IndividualRaceResult(this, entry)). - forEach(overall_results::add); + forEachOrdered(overall_results::add); } @Override @@ -198,13 +197,10 @@ private IndividualRaceEntry getEntryWithBibNumber(final int bib_number) { private int getRecordedPosition(final int bib_number) { - final AtomicInteger position = new AtomicInteger(0); + final int position = (int) raw_results.stream(). + takeWhile(result -> result.getBibNumber() != bib_number). + count(); - return raw_results.stream(). - peek(_ -> position.incrementAndGet()). - filter(result -> result.getBibNumber() == bib_number). - map(_ -> position.get()). - findFirst(). - orElse(UNKNOWN_RACE_POSITION); + return position <= raw_results.size() ? position : UNKNOWN_RACE_POSITION; } } diff --git a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRace.java b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRace.java index 39b7f2eb..76409d97 100644 --- a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRace.java +++ b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRace.java @@ -300,16 +300,14 @@ protected Duration sumDurationsUpToLeg(final List leg_results, final private int getRecordedLegPosition(final int bib_number, final int leg_number) { - final AtomicInteger position = new AtomicInteger(0); final AtomicInteger legs_completed = new AtomicInteger(0); - return raw_results.stream(). - peek(_ -> position.incrementAndGet()). - filter(result -> result.getBibNumber() == bib_number). - filter(_ -> legs_completed.incrementAndGet() == leg_number). - map(_ -> position.get()). - findFirst(). - orElse(UNKNOWN_RACE_POSITION); + final int position = (int) raw_results.stream(). + peek(result -> { if (result.getBibNumber() == bib_number) legs_completed.incrementAndGet(); }). + takeWhile(result -> result.getBibNumber() != bib_number || legs_completed.get() < leg_number). + count() + 1; + + return position <= raw_results.size() ? position : UNKNOWN_RACE_POSITION; } private int getRecordedLastLegPosition(final RelayRaceResult result) { @@ -397,7 +395,7 @@ private void configureGenderEligibilityMap() throws IOException { Files.readAllLines(getPath(gender_eligibility_map_path)).stream(). filter(line -> !line.startsWith(COMMENT_SYMBOL)). - forEach(line -> { + forEachOrdered(line -> { final String[] elements = line.split(","); gender_eligibility_map.put(elements[0],elements[1]); }); @@ -449,7 +447,7 @@ private void recordLegResults() { raw_results.stream(). filter(result -> result.getBibNumber() != UNKNOWN_BIB_NUMBER). - forEach(result -> recordLegResult((RelayRaceRawResult) result)); + forEachOrdered(result -> recordLegResult((RelayRaceRawResult) result)); } private void recordLegResult(final RelayRaceRawResult raw_result) { diff --git a/src/main/java/org/grahamkirby/race_timing/series_race/SeriesRace.java b/src/main/java/org/grahamkirby/race_timing/series_race/SeriesRace.java index 45aaca5c..a9bf9234 100644 --- a/src/main/java/org/grahamkirby/race_timing/series_race/SeriesRace.java +++ b/src/main/java/org/grahamkirby/race_timing/series_race/SeriesRace.java @@ -74,7 +74,7 @@ protected void initialiseResults() { map(result -> result.entry.runner). distinct(). map(this::getOverallResult). - forEach(overall_results::add); + forEachOrdered(overall_results::add); } @Override diff --git a/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_grand_prix/GrandPrixRace.java b/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_grand_prix/GrandPrixRace.java index f33c7b6d..b2c281b4 100644 --- a/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_grand_prix/GrandPrixRace.java +++ b/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_grand_prix/GrandPrixRace.java @@ -16,7 +16,6 @@ */ package org.grahamkirby.race_timing.series_race.fife_ac_grand_prix; -import org.grahamkirby.race_timing.common.CompletionStatus; import org.grahamkirby.race_timing.common.RaceInput; import org.grahamkirby.race_timing.common.RaceResult; import org.grahamkirby.race_timing.common.Runner; @@ -27,7 +26,6 @@ import org.grahamkirby.race_timing.common.output.RaceOutputPDF; import org.grahamkirby.race_timing.common.output.RaceOutputText; import org.grahamkirby.race_timing.individual_race.IndividualRace; -import org.grahamkirby.race_timing.individual_race.IndividualRaceResult; import org.grahamkirby.race_timing.series_race.SeriesRace; import java.io.IOException; @@ -35,8 +33,6 @@ import java.nio.file.Paths; import java.util.Comparator; import java.util.List; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicInteger; public class GrandPrixRace extends SeriesRace { @@ -175,57 +171,20 @@ private boolean clubIsDefined(final String club) { private List getRunnerClubs(final String runner_name) { - return races.stream(). - filter(Objects::nonNull). - flatMap(race -> race.getOverallResults().stream()). - map(result -> (IndividualRaceResult)result). - map(result -> result.entry.runner). - filter(runner -> runner.name.equals(runner_name)). - map(runner -> runner.club). - distinct(). - sorted(). - toList(); + return null; } private List getRunnerNames() { - return races.stream(). - filter(Objects::nonNull). - flatMap(race -> race.getOverallResults().stream()). - map(result -> (IndividualRaceResult)result). - map(result -> result.entry.runner.name). - distinct(). - toList(); + return null; } private void recordDefinedClubForRunnerName(final String runner_name, final String defined_club) { - races.stream(). - filter(Objects::nonNull). - flatMap(race -> race.getOverallResults().stream()). - map(result -> (IndividualRaceResult)result). - map(result -> result.entry.runner). - filter(runner -> runner.name.equals(runner_name)). - forEach(runner -> runner.club = defined_club); } public int calculateRaceScore(final IndividualRace individual_race, final Runner runner) { - if (individual_race == null) return 0; - - final String gender = runner.category.getGender(); - final AtomicInteger score = new AtomicInteger(max_race_score + 1); - - // The first finisher of each gender gets the maximum score, the next finisher one less, and so on. - - return individual_race.getOverallResults().stream(). - map(result -> (IndividualRaceResult) result). - filter(result -> result.getCompletionStatus() == CompletionStatus.COMPLETED). - map(result -> result.entry.runner). - peek(result_runner -> { if (gender.equals(result_runner.category.getGender())) score.decrementAndGet(); }). - filter(result_runner -> result_runner.equals(runner)). - findFirst(). - map(_ -> Math.max(score.get(), 0)). - orElse(0); // Runner didn't compete in this race. + return 0; } } diff --git a/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_midweek/MidweekRace.java b/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_midweek/MidweekRace.java index 4e3e8fcc..1187ff5a 100644 --- a/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_midweek/MidweekRace.java +++ b/src/main/java/org/grahamkirby/race_timing/series_race/fife_ac_midweek/MidweekRace.java @@ -218,6 +218,6 @@ private void recordDefinedClubForRunnerName(final String runner_name, final Stri map(result -> (IndividualRaceResult)result). map(result -> result.entry.runner). filter(runner -> runner.name.equals(runner_name)). - forEach(runner -> runner.club = defined_club); + forEachOrdered(runner -> runner.club = defined_club); } }