From cbcfa8f88453f60f83e2629f48e61a688e86de74 Mon Sep 17 00:00:00 2001 From: Jetz Date: Sun, 22 Sep 2024 15:56:48 -0400 Subject: [PATCH] Guava migration - Replace select usages of Aggregates methods --- .../main/java/forge/ai/ComputerUtilCard.java | 34 +++++++++---------- .../java/forge/ai/ability/CountersPutAi.java | 5 ++- .../java/forge/ai/ability/DamageDealAi.java | 6 ++-- .../java/forge/game/ability/AbilityUtils.java | 14 +++++--- .../forge/game/player/PlayerCollection.java | 1 + 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index 3929f8c4702..e302932f00c 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -4,6 +4,7 @@ import java.util.*; import java.util.Map.Entry; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Stream; import forge.ai.simulation.GameStateEvaluator; import forge.card.mana.ManaCost; @@ -81,12 +82,11 @@ public class ComputerUtilCard { * @return a {@link forge.game.card.Card} object. */ public static Card getBestArtifactAI(final List list) { - List all = CardLists.filter(list, CardPredicates.ARTIFACTS); - if (all.size() == 0) { - return null; - } // get biggest Artifact - return Aggregates.itemWithMax(all, Card::getCMC); + return list.stream() + .filter(CardPredicates.ARTIFACTS) + .max(Comparator.comparing(Card::getCMC)) + .orElse(null); } /** @@ -96,12 +96,11 @@ public class ComputerUtilCard { * @return best Planeswalker */ public static Card getBestPlaneswalkerAI(final List list) { - List all = CardLists.filter(list, CardPredicates.PLANESWALKERS); - if (all.isEmpty()) { - return null; - } // no AI logic, just return most expensive - return Aggregates.itemWithMax(all, Card::getCMC); + return list.stream() + .filter(CardPredicates.PLANESWALKERS) + .max(Comparator.comparing(Card::getCMC)) + .orElse(null); } /** @@ -111,12 +110,11 @@ public class ComputerUtilCard { * @return best Planeswalker */ public static Card getWorstPlaneswalkerAI(final List list) { - List all = CardLists.filter(list, CardPredicates.PLANESWALKERS); - if (all.isEmpty()) { - return null; - } // no AI logic, just return least expensive - return Aggregates.itemWithMin(all, Card::getCMC); + return list.stream() + .filter(CardPredicates.PLANESWALKERS) + .min(Comparator.comparing(Card::getCMC)) + .orElse(null); } public static Card getBestPlaneswalkerToDamage(final List pws) { @@ -182,13 +180,13 @@ public class ComputerUtilCard { * @return a {@link forge.game.card.Card} object. */ public static Card getBestEnchantmentAI(final List list, final SpellAbility spell, final boolean targeted) { - List all = CardLists.filter(list, CardPredicates.ENCHANTMENTS); + Stream cardStream = list.stream().filter(CardPredicates.ENCHANTMENTS); if (targeted) { - all = CardLists.filter(all, c -> c.canBeTargetedBy(spell)); + cardStream = cardStream.filter(c -> c.canBeTargetedBy(spell)); } // get biggest Enchantment - return Aggregates.itemWithMax(all, Card::getCMC); + return cardStream.max(Comparator.comparing(Card::getCMC)).orElse(null); } /** diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index 467af4ae521..95d7c5381ba 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -380,7 +380,10 @@ public class CountersPutAi extends CountersAi { sa.setXManaCostPaid(amount); } else if ("ExiledCreatureFromGraveCMC".equals(logic)) { // e.g. Necropolis - amount = Aggregates.max(CardLists.filter(ai.getCardsIn(ZoneType.Graveyard), CardPredicates.CREATURES), Card::getCMC); + amount = ai.getCardsIn(ZoneType.Graveyard).stream() + .filter(CardPredicates.CREATURES) + .mapToInt(Card::getCMC) + .max().orElse(0); if (amount > 0 && ai.getGame().getPhaseHandler().is(PhaseType.END_OF_TURN)) { return true; } diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index d311f927525..a2a0b5416bc 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -168,8 +168,10 @@ public class DamageDealAi extends DamageAiBase { } } else if ("WildHunt".equals(logic)) { // This dummy ability will just deal 0 damage, but holds the logic for the AI for Master of Wild Hunt - List wolves = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), "Creature.Wolf+untapped+YouCtrl+Other", ai, source, sa); - dmg = Aggregates.sum(wolves, Card::getNetPower); + dmg = ai.getCardsIn(ZoneType.Battlefield).stream() + .filter(CardPredicates.restriction("Creature.Wolf+untapped+YouCtrl+Other", ai, source, sa)) + .mapToInt(Card::getNetPower) + .sum(); } else if ("Triskelion".equals(logic)) { final int n = source.getCounters(CounterEnumType.P1P1); if (n > 0) { diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index bac2620b331..e01d70ea0a2 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2887,14 +2887,18 @@ public class AbilityUtils { // TODO move below to handlePaid if (sq[0].startsWith("SumPower")) { final String[] restrictions = l[0].split("_"); - CardCollection filteredCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restrictions[1], player, c, ctb); - return doXMath(Aggregates.sum(filteredCards, Card::getNetPower), expr, c, ctb); + int sumPower = game.getCardsIn(ZoneType.Battlefield).stream() + .filter(CardPredicates.restriction(restrictions[1], player, c, ctb)) + .mapToInt(Card::getNetPower).sum(); + return doXMath(sumPower, expr, c, ctb); } if (sq[0].startsWith("DifferentPower_")) { final String restriction = l[0].substring(15); - CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); - final Iterable powers = Aggregates.uniqueByLast(list, Card::getNetPower); - return doXMath(Iterables.size(powers), expr, c, ctb); + final int uniquePowers = (int) game.getCardsIn(ZoneType.Battlefield).stream() + .filter(CardPredicates.restriction(restriction, player, c, ctb)) + .map(Card::getNetPower) + .distinct().count(); + return doXMath(uniquePowers, expr, c, ctb); } if (sq[0].startsWith("DifferentCounterKinds_")) { final Set kinds = Sets.newHashSet(); diff --git a/forge-game/src/main/java/forge/game/player/PlayerCollection.java b/forge-game/src/main/java/forge/game/player/PlayerCollection.java index adbd323760d..a7e09370036 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerCollection.java +++ b/forge-game/src/main/java/forge/game/player/PlayerCollection.java @@ -67,6 +67,7 @@ public class PlayerCollection extends FCollection { } // value functions with Function + //TODO: Could probably move these up to FCollectionView, apply them, and trim off a bunch of "Aggregates" clauses. public Integer min(Function func) { return Aggregates.min(this, func); }