diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java
index cdfe1e9b85c..6307829cdf9 100644
--- a/forge-ai/src/main/java/forge/ai/AiController.java
+++ b/forge-ai/src/main/java/forge/ai/AiController.java
@@ -62,6 +62,7 @@ import io.sentry.Sentry;
import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
/**
*
@@ -2205,7 +2206,7 @@ public class AiController {
// TODO move to more common place
private static List filterList(List input, Predicate super T> pred) {
- List filtered = Lists.newArrayList(Iterables.filter(input, pred));
+ List filtered = input.stream().filter(pred).collect(Collectors.toList());
input.removeAll(filtered);
return filtered;
}
diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java
index ac36d80c602..050574ba77c 100644
--- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java
+++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java
@@ -250,12 +250,11 @@ public class ComputerUtilCard {
final List bLand = CardLists.getType(land, sminBL);
- for (Card ut : Iterables.filter(bLand, CardPredicates.UNTAPPED)) {
- return ut;
- }
-
- // TODO potentially risky if simulation mode currently able to reach this from triggers
- return Aggregates.random(bLand); // random tapped land of least represented type
+ return bLand.stream()
+ .filter(CardPredicates.UNTAPPED)
+ .findFirst()
+ // TODO potentially risky if simulation mode currently able to reach this from triggers
+ .orElseGet(() -> Aggregates.random(bLand)); // random tapped land of least represented type
}
/**
diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java
index d3b6ba1144a..7b320ebb9ef 100644
--- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java
+++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java
@@ -41,12 +41,12 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
-import forge.util.Iterables;
import forge.util.MyRandom;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
+import java.util.stream.Collectors;
public class ComputerUtilMana {
private final static boolean DEBUG_MANA_PAYMENT = false;
@@ -264,7 +264,10 @@ public class ComputerUtilMana {
saList = filteredList;
break;
case "NotSameCard":
- saList = Lists.newArrayList(Iterables.filter(filteredList, saPay -> !saPay.getHostCard().getName().equals(sa.getHostCard().getName())));
+ String hostName = sa.getHostCard().getName();
+ saList = filteredList.stream()
+ .filter(saPay -> !saPay.getHostCard().getName().equals(hostName))
+ .collect(Collectors.toList());
break;
default:
break;
diff --git a/forge-ai/src/main/java/forge/ai/SpecialCardAi.java b/forge-ai/src/main/java/forge/ai/SpecialCardAi.java
index fb8e4c8c5c5..f67ae1cfaf2 100644
--- a/forge-ai/src/main/java/forge/ai/SpecialCardAi.java
+++ b/forge-ai/src/main/java/forge/ai/SpecialCardAi.java
@@ -685,7 +685,7 @@ public class SpecialCardAi {
// Goblin Polka Band
public static class GoblinPolkaBand {
public static boolean consider(final Player ai, final SpellAbility sa) {
- int maxPotentialTgts = Lists.newArrayList(Iterables.filter(ai.getOpponents().getCreaturesInPlay(), CardPredicates.UNTAPPED)).size();
+ int maxPotentialTgts = ai.getOpponents().getCreaturesInPlay().filter(CardPredicates.UNTAPPED).size();
int maxPotentialPayment = ComputerUtilMana.determineLeftoverMana(sa, ai, "R", false);
int numTgts = Math.min(maxPotentialPayment, maxPotentialTgts);
@@ -1295,7 +1295,7 @@ public class SpecialCardAi {
public static boolean considerSecondTarget(final Player ai, final SpellAbility sa) {
Card firstTgt = sa.getParent().getTargetCard();
- Iterable candidates = Iterables.filter(ai.getOpponents().getCardsIn(ZoneType.Battlefield),
+ CardCollection candidates = ai.getOpponents().getCardsIn(ZoneType.Battlefield).filter(
CardPredicates.sharesCardTypeWith(firstTgt).and(CardPredicates.isTargetableBy(sa)));
Card secondTgt = Aggregates.random(candidates);
if (secondTgt != null) {
diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseGenericAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericAi.java
index 29b47d497a8..e9686d20584 100644
--- a/forge-ai/src/main/java/forge/ai/ability/ChooseGenericAi.java
+++ b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericAi.java
@@ -13,11 +13,11 @@ import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
-import forge.util.Iterables;
import forge.util.collect.FCollection;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
public class ChooseGenericAi extends SpellAbilityAi {
@@ -84,7 +84,9 @@ public class ChooseGenericAi extends SpellAbilityAi {
} else if ("Random".equals(logic)) {
return Aggregates.random(spells);
} else if ("Phasing".equals(logic)) { // Teferi's Realm : keep aggressive
- List filtered = Lists.newArrayList(Iterables.filter(spells, sp -> !sp.getDescription().contains("Creature") && !sp.getDescription().contains("Land")));
+ List filtered = spells.stream()
+ .filter(sp -> !sp.getDescription().contains("Creature") && !sp.getDescription().contains("Land"))
+ .collect(Collectors.toList());
return Aggregates.random(filtered);
} else if ("PayUnlessCost".equals(logic)) {
for (final SpellAbility sp : spells) {
diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java
index 522590f4e13..6e1defd5d4b 100644
--- a/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java
+++ b/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java
@@ -23,7 +23,6 @@ import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
-import forge.util.Iterables;
public class CountersMultiplyAi extends SpellAbilityAi {
@@ -103,7 +102,9 @@ public class CountersMultiplyAi extends SpellAbilityAi {
if (list.isEmpty()) {
return false;
}
- Card safeMatch = Iterables.getFirst(Iterables.filter(list, CardPredicates.hasCounters().negate()), null);
+ Card safeMatch = list.stream()
+ .filter(CardPredicates.hasCounters().negate())
+ .findFirst().orElse(null);
sa.getTargets().add(safeMatch == null ? list.getFirst() : safeMatch);
return true;
}
diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java
index 1798b3a7037..7407e41fb4c 100644
--- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java
+++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java
@@ -2,7 +2,6 @@ package forge.ai.ability;
import java.util.List;
import java.util.Map;
-import java.util.function.Predicate;
import forge.ai.AiController;
import forge.ai.AiProps;
diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java
index d0bd09571d5..89c851d5750 100644
--- a/forge-core/src/main/java/forge/card/CardDb.java
+++ b/forge-core/src/main/java/forge/card/CardDb.java
@@ -38,6 +38,7 @@ import java.util.*;
import java.util.Map.Entry;
import java.util.function.Predicate;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
public final class CardDb implements ICardDatabase, IDeckGenPool {
public final static String foilSuffix = "+";
@@ -827,7 +828,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return null; // nothing to do
// Filter Cards Editions based on set preferences
- List acceptedEditions = Lists.newArrayList(Iterables.filter(cardEditions, artPref::accept));
+ List acceptedEditions = cardEditions.stream().filter(artPref::accept).collect(Collectors.toList());
/* At this point, it may be possible that Art Preference is too-strict for the requested card!
i.e. acceptedEditions.size() == 0!
@@ -899,6 +900,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
}).values();
}
+ public List getUniqueCardsNoAlt(String cardName) {
+ return Lists.newArrayList(Maps.filterEntries(uniqueCardsByName, entry -> entry.getKey().equals(entry.getValue().getName())).get(getName(cardName)));
+ }
+
public PaperCard getUniqueByName(final String name) {
return uniqueCardsByName.get(getName(name));
}
@@ -940,8 +945,23 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return Multimaps.filterEntries(allCardsByName, entry -> entry.getKey().equals(entry.getValue().getName())).values();
}
- public Collection getAllNonPromoCards() {
- return Lists.newArrayList(Iterables.filter(getAllCards(), paperCard -> {
+ @Override
+ public Stream streamAllCards() {
+ return allCardsByName.values().stream();
+ }
+ @Override
+ public Stream streamUniqueCards() {
+ return uniqueCardsByName.values().stream();
+ }
+ public Stream streamAllCardsNoAlt() {
+ return allCardsByName.entries().stream().filter(e -> e.getKey().equals(e.getValue().getName())).map(Entry::getValue);
+ }
+ public Stream streamUniqueCardsNoAlt() {
+ return uniqueCardsByName.entrySet().stream().filter(e -> e.getKey().equals(e.getValue().getName())).map(Entry::getValue);
+ }
+ public Stream streamAllNonPromoCards() {
+ //TODO: This should probably just be a filter to tack onto streamAllCards
+ return streamAllCards().filter(paperCard -> {
CardEdition edition = null;
try {
edition = editions.getEditionByCodeOrThrow(paperCard.getEdition());
@@ -949,11 +969,19 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return false;
}
return edition != null && edition.getType() != Type.PROMO;
- }));
+ });
+ }
+
+ public Stream streamAllFaces() {
+ return facesByName.values().stream();
+ }
+
+ public Collection getAllNonPromoCards() {
+ return streamAllNonPromoCards().collect(Collectors.toList());
}
public Collection getUniqueCardsNoAltNoOnline() {
- return Lists.newArrayList(Iterables.filter(getUniqueCardsNoAlt(), paperCard -> {
+ return streamUniqueCardsNoAlt().filter(paperCard -> {
CardEdition edition = null;
try {
edition = editions.getEditionByCodeOrThrow(paperCard.getEdition());
@@ -963,11 +991,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return false;
}
return true;
- }));
+ }).collect(Collectors.toList());
}
public Collection getAllNonPromosNonReprintsNoAlt() {
- return Lists.newArrayList(Iterables.filter(getAllCardsNoAlt(), paperCard -> {
+ //TODO: This should probably also be a stream filter.
+ return streamAllCardsNoAlt().filter(paperCard -> {
CardEdition edition = null;
try {
edition = editions.getEditionByCodeOrThrow(paperCard.getEdition());
@@ -977,7 +1006,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return false;
}
return true;
- }));
+ }).collect(Collectors.toList());
}
public String getName(final String cardName) {
@@ -1007,19 +1036,19 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
*/
@Override
public List getAllCards(Predicate predicate) {
- return Lists.newArrayList(Iterables.filter(getAllCards(), predicate));
+ return streamAllCards().filter(predicate).collect(Collectors.toCollection(ArrayList::new));
}
@Override
public List getAllCards(final String cardName, Predicate predicate){
- return Lists.newArrayList(Iterables.filter(getAllCards(cardName), predicate));
+ return getAllCards(cardName).stream().filter(predicate).collect(Collectors.toCollection(ArrayList::new));
}
/**
* Returns a modifiable list of cards matching the given predicate
*/
public List getAllCardsNoAlt(Predicate predicate) {
- return Lists.newArrayList(Iterables.filter(getAllCardsNoAlt(), predicate));
+ return streamAllCardsNoAlt().filter(predicate).collect(Collectors.toCollection(ArrayList::new));
}
// Do I want a foiled version of these cards?
diff --git a/forge-core/src/main/java/forge/card/CardType.java b/forge-core/src/main/java/forge/card/CardType.java
index 3aa0bc249ad..ae289765fe2 100644
--- a/forge-core/src/main/java/forge/card/CardType.java
+++ b/forge-core/src/main/java/forge/card/CardType.java
@@ -304,9 +304,7 @@ public final class CardType implements Comparable, CardTypeView {
creatureTypes.addAll(getAllCreatureTypes());
creatureTypes.removeAll(this.excludedCreatureSubtypes);
} else {
- for (final String t : Iterables.filter(subtypes, Predicates.IS_CREATURE_TYPE)) {
- creatureTypes.add(t);
- }
+ subtypes.stream().filter(Predicates.IS_CREATURE_TYPE).forEach(creatureTypes::add);
}
return creatureTypes;
}
diff --git a/forge-core/src/main/java/forge/card/ICardDatabase.java b/forge-core/src/main/java/forge/card/ICardDatabase.java
index 52b86868627..4e4016accce 100644
--- a/forge-core/src/main/java/forge/card/ICardDatabase.java
+++ b/forge-core/src/main/java/forge/card/ICardDatabase.java
@@ -7,6 +7,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
+import java.util.stream.Stream;
public interface ICardDatabase extends Iterable {
/**
@@ -85,6 +86,9 @@ public interface ICardDatabase extends Iterable {
Collection getAllCards(CardEdition edition);
Collection getUniqueCards();
+ Stream streamAllCards();
+ Stream streamUniqueCards();
+
/* UTILITY METHODS
* =============== */
int getMaxArtIndex(String cardName);
diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java
index dd3b313f7eb..188c409ed53 100644
--- a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java
+++ b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java
@@ -38,11 +38,9 @@ public class DeckGenPool implements IDeckGenPool {
@Override
public PaperCard getCard(String name, String edition) {
Predicate filter = PaperCardPredicates.printedInSet(edition).and(PaperCardPredicates.name(name));
- Iterable editionCards=Iterables.filter(cards.values(), filter);
- if (editionCards.iterator().hasNext()){
- return editionCards.iterator().next();
- }
- return getCard(name);
+ return cards.values().stream()
+ .filter(filter)
+ .findFirst().orElseGet(() -> getCard(name));
}
@Override
diff --git a/forge-core/src/main/java/forge/item/SealedProduct.java b/forge-core/src/main/java/forge/item/SealedProduct.java
index 4cddf19bb25..f2fb3ea7743 100644
--- a/forge-core/src/main/java/forge/item/SealedProduct.java
+++ b/forge-core/src/main/java/forge/item/SealedProduct.java
@@ -22,11 +22,11 @@ import forge.StaticData;
import forge.card.CardRulesPredicates;
import forge.item.generation.BoosterGenerator;
import forge.util.Aggregates;
-import forge.util.Iterables;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
public abstract class SealedProduct implements InventoryItemFromSet {
@@ -114,6 +114,6 @@ public abstract class SealedProduct implements InventoryItemFromSet {
protected List getRandomBasicLands(final String setCode, final int count) {
Predicate cardsRule = PaperCardPredicates.printedInSet(setCode)
.and(PaperCardPredicates.fromRules(CardRulesPredicates.IS_BASIC_LAND));
- return Aggregates.random(Iterables.filter(StaticData.instance().getCommonCards().getAllCards(), cardsRule), count);
+ return Aggregates.random(StaticData.instance().getCommonCards().streamAllCards().filter(cardsRule).collect(Collectors.toList()), count);
}
}
diff --git a/forge-core/src/main/java/forge/util/Iterables.java b/forge-core/src/main/java/forge/util/Iterables.java
index 6f86363025d..a0d1e9b9911 100644
--- a/forge-core/src/main/java/forge/util/Iterables.java
+++ b/forge-core/src/main/java/forge/util/Iterables.java
@@ -19,6 +19,9 @@ public class Iterables {
public static Iterable filter(Iterable iterable, Predicate super T> filter) {
return () -> StreamSupport.stream(iterable.spliterator(), false).filter(filter).iterator();
}
+ public static Iterable filter(Collection iterable, Predicate super T> filter) {
+ return () -> iterable.stream().filter(filter).iterator();
+ }
public static Iterable filter(final Iterable> iterable, final Class desiredType) {
return () -> StreamSupport.stream(iterable.spliterator(), false)
.filter(desiredType::isInstance)
@@ -63,10 +66,6 @@ public class Iterables {
//TODO: Inline everything below.
- public static Iterable filter(Collection iterable, Predicate super T> filter) {
- return () -> iterable.stream().filter(filter).iterator();
- }
-
public static int size(Collection> collection) {
return collection.size();
diff --git a/forge-core/src/main/java/forge/util/storage/IStorage.java b/forge-core/src/main/java/forge/util/storage/IStorage.java
index 3818c8edfbb..e9689f211c1 100644
--- a/forge-core/src/main/java/forge/util/storage/IStorage.java
+++ b/forge-core/src/main/java/forge/util/storage/IStorage.java
@@ -19,6 +19,7 @@ package forge.util.storage;
import java.util.Collection;
import java.util.function.Predicate;
+import java.util.stream.Stream;
import forge.util.IHasName;
@@ -35,4 +36,5 @@ public interface IStorage extends Iterable, IHasName {
IStorage> getFolders();
IStorage tryGetFolder(String path);
IStorage getFolderOrCreate(String path);
+ Stream stream();
}
\ No newline at end of file
diff --git a/forge-core/src/main/java/forge/util/storage/StorageBase.java b/forge-core/src/main/java/forge/util/storage/StorageBase.java
index 7de2ca73ccc..3683047181d 100644
--- a/forge-core/src/main/java/forge/util/storage/StorageBase.java
+++ b/forge-core/src/main/java/forge/util/storage/StorageBase.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.io.FilenameFilter;
import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Stream;
/**
*
@@ -65,6 +66,11 @@ public class StorageBase implements IStorage {
return map.values().iterator();
}
+ @Override
+ public Stream stream() {
+ return map.values().stream();
+ }
+
@Override
public boolean contains(String name) {
return name != null && map.containsKey(name);
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 5d84da5f3e2..1140dfef976 100644
--- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java
+++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java
@@ -495,7 +495,7 @@ public class AbilityUtils {
players.addAll(player.getOpponents());
val = playerXCount(players, calcX[1], card, ability);
} else if (hType.equals("RegisteredOpponents")) {
- players.addAll(Iterables.filter(game.getRegisteredPlayers(), PlayerPredicates.isOpponentOf(player)));
+ players.addAll(game.getRegisteredPlayers().filter(PlayerPredicates.isOpponentOf(player)));
val = playerXCount(players, calcX[1], card, ability);
} else if (hType.equals("Other")) {
players.addAll(player.getAllOtherPlayers());
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java
index 89ffe7e6f6d..b0aa3745307 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java
@@ -150,7 +150,7 @@ public class CopyPermanentEffect extends TokenEffectBase {
List tgtCards = Lists.newArrayList();
if (sa.hasParam("ValidSupportedCopy")) {
- List cards = Lists.newArrayList(StaticData.instance().getCommonCards().getUniqueCards());
+ Iterable cards = StaticData.instance().getCommonCards().getUniqueCards();
String valid = sa.getParam("ValidSupportedCopy");
if (valid.contains("X")) {
valid = TextUtil.fastReplace(valid,
@@ -158,11 +158,11 @@ public class CopyPermanentEffect extends TokenEffectBase {
}
if (StringUtils.containsIgnoreCase(valid, "creature")) {
Predicate cpp = PaperCardPredicates.fromRules(CardRulesPredicates.IS_CREATURE);
- cards = Lists.newArrayList(Iterables.filter(cards, cpp));
+ cards = Iterables.filter(cards, cpp);
}
if (StringUtils.containsIgnoreCase(valid, "equipment")) {
Predicate cpp = PaperCardPredicates.fromRules(CardRulesPredicates.IS_EQUIPMENT);
- cards = Lists.newArrayList(Iterables.filter(cards, cpp));
+ cards = Iterables.filter(cards, cpp);
}
if (sa.hasParam("RandomCopied")) {
List copysource = Lists.newArrayList(cards);
diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java
index 85efa8f76a1..43d9de299b7 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java
@@ -2,6 +2,7 @@ package forge.game.ability.effects;
import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import forge.card.CardStateName;
import forge.card.GamePieceType;
@@ -10,7 +11,6 @@ import forge.util.*;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
import forge.StaticData;
import forge.card.CardRulesPredicates;
@@ -117,13 +117,11 @@ public class PlayEffect extends SpellAbilityEffect {
cards.add(StaticData.instance().getCommonCards().getUniqueByName(name));
}
} else if (valid.equalsIgnoreCase("sorcery")) {
- cards = Lists.newArrayList(StaticData.instance().getCommonCards().getUniqueCards());
final Predicate cpp = PaperCardPredicates.fromRules(CardRulesPredicates.IS_SORCERY);
- cards = Lists.newArrayList(Iterables.filter(cards, cpp));
+ cards = StaticData.instance().getCommonCards().streamUniqueCards().filter(cpp).collect(Collectors.toList());
} else if (valid.equalsIgnoreCase("instant")) {
- cards = Lists.newArrayList(StaticData.instance().getCommonCards().getUniqueCards());
final Predicate cpp = PaperCardPredicates.fromRules(CardRulesPredicates.IS_INSTANT);
- cards = Lists.newArrayList(Iterables.filter(cards, cpp));
+ cards = StaticData.instance().getCommonCards().streamUniqueCards().filter(cpp).collect(Collectors.toList());
}
if (sa.hasParam("RandomCopied")) {
final CardCollection choice = new CardCollection();
diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java
index a36b078df29..e16508b1fd1 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java
@@ -1,7 +1,8 @@
package forge.game.ability.effects;
import java.util.List;
-import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import com.google.common.collect.Lists;
@@ -18,7 +19,6 @@ import forge.game.spellability.SpellAbility;
import forge.item.PaperCard;
import forge.item.PaperCardPredicates;
import forge.util.Aggregates;
-import forge.util.Iterables;
public class PlayLandVariantEffect extends SpellAbilityEffect {
@@ -28,10 +28,9 @@ public class PlayLandVariantEffect extends SpellAbilityEffect {
final Player activator = sa.getActivatingPlayer();
final Game game = source.getGame();
final String landType = sa.getParam("Clone");
- List cards = Lists.newArrayList(StaticData.instance().getCommonCards().getUniqueCards());
+ Stream cardStream = StaticData.instance().getCommonCards().streamUniqueCards();
if ("BasicLand".equals(landType)) {
- final Predicate cpp = PaperCardPredicates.fromRules(CardRulesPredicates.IS_BASIC_LAND);
- cards = Lists.newArrayList(Iterables.filter(cards, cpp));
+ cardStream = cardStream.filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_BASIC_LAND));
}
// current color of source card
final ColorSet color = source.getColor();
@@ -47,8 +46,8 @@ public class PlayLandVariantEffect extends SpellAbilityEffect {
}
}
- final Predicate cp = x -> landNames.contains(x.getName());
- cards = Lists.newArrayList(Iterables.filter(cards, cp));
+ cardStream = cardStream.filter(x -> landNames.contains(x.getName()));
+ List cards = cardStream.collect(Collectors.toList());
// get a random basic land
Card random;
// if activator cannot play the random land, loop
diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java
index 95dbf2cd41f..895cbc5cde6 100644
--- a/forge-game/src/main/java/forge/game/card/Card.java
+++ b/forge-game/src/main/java/forge/game/card/Card.java
@@ -3371,9 +3371,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars {
if (ck.isRemoveNonMana()) {
// List only has nonMana
if (null == mana) {
- List toRemove = Lists.newArrayList(
- Iterables.filter(list, SpellAbilityPredicates.isManaAbility().negate()));
- list.removeAll(toRemove);
+ list.removeIf(SpellAbilityPredicates.isManaAbility().negate());
} else if (false == mana) {
list.clear();
}
diff --git a/forge-game/src/main/java/forge/game/card/CardCollection.java b/forge-game/src/main/java/forge/game/card/CardCollection.java
index a5dbd4c4bca..684cde8e2ca 100644
--- a/forge-game/src/main/java/forge/game/card/CardCollection.java
+++ b/forge-game/src/main/java/forge/game/card/CardCollection.java
@@ -2,6 +2,8 @@ package forge.game.card;
import forge.util.collect.FCollection;
+import java.util.function.Predicate;
+
public class CardCollection extends FCollection implements CardCollectionView {
private static final long serialVersionUID = -8133537013727100275L;
@@ -123,6 +125,16 @@ public class CardCollection extends FCollection implements CardCollectionV
return new CardCollection(super.subList(fromIndex, toIndex));
}
+ /**
+ * Creates a new CardCollection containing the elements from this collection which match
+ * the given predicate.
+ */
+ public CardCollection filter(Predicate super Card> test) {
+ CardCollection out = new CardCollection();
+ this.stream().filter(test).forEach(out::add);
+ return out;
+ }
+
/**
* An unmodifiable, empty {@link CardCollection}.
*/
diff --git a/forge-game/src/main/java/forge/game/card/CardDamageMap.java b/forge-game/src/main/java/forge/game/card/CardDamageMap.java
index 00e86fad8d7..e4b190da9ed 100644
--- a/forge-game/src/main/java/forge/game/card/CardDamageMap.java
+++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java
@@ -6,11 +6,11 @@ package forge.game.card;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.stream.Collectors;
import com.google.common.collect.ForwardingTable;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import com.google.common.collect.Table;
import forge.game.CardTraitBase;
@@ -23,7 +23,6 @@ import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
-import forge.util.Iterables;
public class CardDamageMap extends ForwardingTable {
private Table dataMap = HashBasedTable.create();
@@ -193,10 +192,10 @@ public class CardDamageMap extends ForwardingTable {
Set filteredSource = null;
Set filteredTarget = null;
if (validSource != null) {
- filteredSource = Sets.newHashSet(Iterables.filter(rowKeySet(), GameObjectPredicates.restriction(validSource.split(","), host.getController(), host, sa)));
+ filteredSource = rowKeySet().stream().filter(GameObjectPredicates.restriction(validSource.split(","), host.getController(), host, sa)).collect(Collectors.toSet());
}
if (validTarget != null) {
- filteredTarget = Sets.newHashSet(Iterables.filter(columnKeySet(), GameObjectPredicates.restriction(validTarget.split(","), host.getController(), host, sa)));
+ filteredTarget = columnKeySet().stream().filter(GameObjectPredicates.restriction(validTarget.split(","), host.getController(), host, sa)).collect(Collectors.toSet());
}
for (Table.Cell c : cellSet()) {
diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java
index b91f1d70660..0b542956b48 100644
--- a/forge-game/src/main/java/forge/game/card/CardUtil.java
+++ b/forge-game/src/main/java/forge/game/card/CardUtil.java
@@ -19,6 +19,7 @@ package forge.game.card;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -39,7 +40,6 @@ import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates;
import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType;
-import forge.util.Iterables;
import forge.util.TextUtil;
import forge.util.collect.FCollection;
@@ -142,7 +142,9 @@ public final class CardUtil {
}
public static List getThisTurnActivated(final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
- return Lists.newArrayList(Iterables.filter(src.getGame().getStack().getAbilityActivatedThisTurn(), SpellAbilityPredicates.isValid(valid.split(","), controller, src, ctb)));
+ return src.getGame().getStack().getAbilityActivatedThisTurn().stream()
+ .filter(SpellAbilityPredicates.isValid(valid.split(","), controller, src, ctb))
+ .collect(Collectors.toList());
}
public static List getCastSinceBeginningOfYourLastTurn(final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
diff --git a/forge-game/src/main/java/forge/game/card/TokenCreateTable.java b/forge-game/src/main/java/forge/game/card/TokenCreateTable.java
index c138a398346..e4f4b04b51b 100644
--- a/forge-game/src/main/java/forge/game/card/TokenCreateTable.java
+++ b/forge-game/src/main/java/forge/game/card/TokenCreateTable.java
@@ -2,13 +2,14 @@ package forge.game.card;
import java.util.List;
import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
-import forge.util.Iterables;
+import forge.game.GameObject;
import org.apache.commons.lang3.ObjectUtils;
import com.google.common.collect.ForwardingTable;
import com.google.common.collect.HashBasedTable;
-import com.google.common.collect.Lists;
import com.google.common.collect.Table;
import forge.game.CardTraitBase;
@@ -48,8 +49,8 @@ public class TokenCreateTable extends ForwardingTable {
}
if (validOwner != null) {
- filteredPlayer = Lists.newArrayList(Iterables.filter(rowKeySet(),
- GameObjectPredicates.restriction(validOwner.split(","), host.getController(), host, ctb)));
+ Predicate restriction = GameObjectPredicates.restriction(validOwner.split(","), host.getController(), host, ctb);
+ filteredPlayer = rowKeySet().stream().filter(restriction).collect(Collectors.toList());
if (filteredPlayer.isEmpty()) {
return 0;
}
diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java
index 2c8d1fc26e7..77cc98d5179 100644
--- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java
+++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java
@@ -48,7 +48,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.function.Predicate;
/**
*
diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java
index 3858120d826..6dc9828d3ab 100644
--- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java
+++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java
@@ -34,6 +34,7 @@ import forge.util.collect.FCollection;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
+import java.util.function.Predicate;
/**
*
@@ -385,7 +386,8 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
}
}
- final int left = Iterables.size(Iterables.filter(list, GameObjectPredicates.restriction(getIsPresent().split(","), activator, host, sa)));
+ Predicate restriction = GameObjectPredicates.restriction(getIsPresent().split(","), activator, host, sa);
+ final int left = (int) list.stream().filter(restriction).count();
final String rightString = this.getPresentCompare().substring(2);
int right = AbilityUtils.calculateAmount(host, rightString, sa);
@@ -416,7 +418,8 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
}
}
- final int left = Iterables.size(Iterables.filter(list, GameObjectPredicates.restriction(getIsPresent2().split(","), activator, host, sa)));
+ Predicate restriction = GameObjectPredicates.restriction(getIsPresent2().split(","), activator, host, sa);
+ final int left = (int) list.stream().filter(restriction).count();
final String rightString = this.getPresentCompare2().substring(2);
int right = AbilityUtils.calculateAmount(host, rightString, sa);
diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java
index 9660aaa66aa..f0cae61de69 100644
--- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java
+++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java
@@ -38,7 +38,6 @@ import forge.game.staticability.StaticAbilityNumLoyaltyAct;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.util.Expressions;
-import forge.util.Iterables;
import forge.util.collect.FCollection;
/**
@@ -468,7 +467,8 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
list = new FCollection<>(game.getCardsIn(getPresentZone()));
}
- final int left = Iterables.size(Iterables.filter(list, GameObjectPredicates.restriction(getIsPresent().split(","), activator, c, sa)));
+ Predicate restriction = GameObjectPredicates.restriction(getIsPresent().split(","), activator, c, sa);
+ final int left = (int) list.stream().filter(restriction).count();
final String rightString = this.getPresentCompare().substring(2);
int right = AbilityUtils.calculateAmount(c, rightString, sa);
diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java
index bb2f9c48e86..d86382aa9b7 100644
--- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java
+++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java
@@ -102,7 +102,7 @@ public class TriggerHandler {
public final void handlePlayerDefinedDelTriggers(final Player player) {
final List playerTriggers = playerDefinedDelayedTriggers.removeAll(player);
- Iterables.filter(playerTriggers, CardTraitPredicates.hasParam("ThisTurn")).forEach(thisTurnDelayedTriggers::add);
+ playerTriggers.stream().filter(CardTraitPredicates.hasParam("ThisTurn")).forEach(thisTurnDelayedTriggers::add);
delayedTriggers.addAll(playerTriggers);
}
diff --git a/forge-gui-desktop/src/main/java/forge/gui/ImportSourceAnalyzer.java b/forge-gui-desktop/src/main/java/forge/gui/ImportSourceAnalyzer.java
index 5831a95215b..b8a0852fb92 100644
--- a/forge-gui-desktop/src/main/java/forge/gui/ImportSourceAnalyzer.java
+++ b/forge-gui-desktop/src/main/java/forge/gui/ImportSourceAnalyzer.java
@@ -24,8 +24,8 @@ import java.util.Map;
import java.util.TreeMap;
import java.util.function.Predicate;
+import forge.card.CardDb;
import forge.item.PaperCardPredicates;
-import forge.util.Iterables;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -356,15 +356,15 @@ public class ImportSourceAnalyzer {
// set card pics
//
- private static void addSetCards(final Map cardFileNames, final Iterable library, final Predicate filter) {
- for (final PaperCard c : Iterables.filter(library, filter)) {
+ private static void addSetCards(final Map cardFileNames, final CardDb library, final Predicate filter) {
+ library.streamAllCards().filter(filter).forEach(c -> {
String filename = c.getCardImageKey() + ".jpg";
cardFileNames.put(filename, filename);
if (c.hasBackFace()) {
filename = c.getCardAltImageKey() + ".jpg";
cardFileNames.put(filename, filename);
}
- }
+ });
}
Map> cardFileNamesBySet;
@@ -375,8 +375,8 @@ public class ImportSourceAnalyzer {
for (final CardEdition ce : FModel.getMagicDb().getEditions()) {
final Map cardFileNames = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
final Predicate filter = PaperCardPredicates.printedInSet(ce.getCode());
- addSetCards(cardFileNames, FModel.getMagicDb().getCommonCards().getAllCards(), filter);
- addSetCards(cardFileNames, FModel.getMagicDb().getVariantCards().getAllCards(), filter);
+ addSetCards(cardFileNames, FModel.getMagicDb().getCommonCards(), filter);
+ addSetCards(cardFileNames, FModel.getMagicDb().getVariantCards(), filter);
cardFileNamesBySet.put(ce.getCode2(), cardFileNames);
}
@@ -384,14 +384,14 @@ public class ImportSourceAnalyzer {
nameUpdates = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
final Predicate predPlanes = arg0 -> arg0.getRules().getType().isPlane() || arg0.getRules().getType().isPhenomenon();
- for (final PaperCard c : Iterables.filter(FModel.getMagicDb().getVariantCards().getAllCards(), predPlanes)) {
+ FModel.getMagicDb().getVariantCards().streamAllCards().filter(predPlanes).forEach(c -> {
String baseName = c.getCardImageKey();
nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg");
if (c.hasBackFace()) {
baseName = c.getCardAltImageKey();
nameUpdates.put(baseName + ".full.jpg", baseName + ".jpg");
}
- }
+ });
}
final CardEdition.Collection editions = FModel.getMagicDb().getEditions();
diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java
index 1b3f3100eb8..78e4b86a5df 100644
--- a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java
+++ b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java
@@ -16,12 +16,13 @@ import forge.model.FModel;
import forge.screens.home.quest.DialogChooseFormats;
import forge.screens.home.quest.DialogChooseSets;
import forge.screens.match.controllers.CDetailPicture;
-import forge.util.Iterables;
import forge.util.Localizer;
import javax.swing.*;
import java.util.*;
import java.util.Map.Entry;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
/**
* ItemManager for cards
@@ -76,7 +77,8 @@ public class CardManager extends ItemManager {
continue; // skip card
// Try to retain only those editions accepted by the current Card Art Preference Policy
- List acceptedEditions = Lists.newArrayList(Iterables.filter(entriesByEdition.keySet(), ed -> StaticData.instance().getCardArtPreference().accept(ed)));
+ Predicate editionPredicate = ed -> StaticData.instance().getCardArtPreference().accept(ed);
+ List acceptedEditions = entriesByEdition.keySet().stream().filter(editionPredicate).collect(Collectors.toList());
// If policy too strict, fall back to getting all editions.
if (acceptedEditions.size() == 0)
diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java
index 79c0b3fc5a9..cd29558f492 100644
--- a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java
+++ b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java
@@ -1007,7 +1007,7 @@ public abstract class ItemManager extends JPanel implem
this.model.addItems(items);
}
else if (useFilter) {
- final Predicate> pred = x -> this.filterPredicate.test(x.getKey());;
+ final Predicate> pred = x -> this.filterPredicate.test(x.getKey());
this.model.addItems(Iterables.filter(this.pool, pred));
}
else if (this.wantUnique) {
diff --git a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestCommanderGeneraterGA.java b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestCommanderGeneraterGA.java
index 8dfef11ac4a..fd0b1411a02 100644
--- a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestCommanderGeneraterGA.java
+++ b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestCommanderGeneraterGA.java
@@ -3,8 +3,7 @@ package forge.planarconquestgenerate;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-
-import com.google.common.collect.Lists;
+import java.util.stream.Collectors;
import forge.GuiDesktop;
import forge.StaticData;
@@ -24,7 +23,6 @@ import forge.item.PaperCardPredicates;
import forge.localinstance.properties.ForgeConstants;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
-import forge.util.Iterables;
public class PlanarConquestCommanderGeneraterGA extends PlanarConquestGeneraterGA {
@@ -75,14 +73,14 @@ public class PlanarConquestCommanderGeneraterGA extends PlanarConquestGeneraterG
cards.add(StaticData.instance().getCommonCards().getUniqueByName(cardName));
}
- Iterable filtered= Iterables.filter(cards,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
+ List filteredList = cards.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
.and(CardRulesPredicates.IS_PLANESWALKER)
//.and(CardRulesPredicates.IS_LEGENDARY)
- ).and(gameFormat.getFilterPrinted())
- );
+ ))
+ .filter(gameFormat.getFilterPrinted())
+ .collect(Collectors.toList());
- List filteredList = Lists.newArrayList(filtered);
rankedList = CardRanker.rankCardsInDeck(filteredList);
List decks = new ArrayList<>();
for(PaperCard card: rankedList.subList(0,cardsToUse)){
diff --git a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneraterGA.java b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneraterGA.java
index 1a452f70acf..43dd1acc27d 100644
--- a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneraterGA.java
+++ b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneraterGA.java
@@ -4,13 +4,12 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import forge.item.PaperCardPredicates;
import forge.util.*;
import org.apache.commons.lang3.tuple.Pair;
-import com.google.common.collect.Lists;
-
import forge.GuiDesktop;
import forge.LobbyPlayer;
import forge.StaticData;
@@ -106,13 +105,12 @@ public class PlanarConquestGeneraterGA extends AbstractGeneticAlgorithm {
cards.add(StaticData.instance().getCommonCards().getUniqueByName(cardName));
}
- Iterable filtered= Iterables.filter(cards,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
- .and(CardRulesPredicates.IS_NON_LAND)
- ).and(gameFormat.getFilterPrinted())
- );
+ List filteredList = cards.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
+ .and(CardRulesPredicates.IS_NON_LAND)))
+ .filter(gameFormat.getFilterPrinted())
+ .collect(Collectors.toList());
- List filteredList = Lists.newArrayList(filtered);
setRankedList(CardRanker.rankCardsInDeck(filteredList));
List decks = new ArrayList<>();
for(PaperCard card: getRankedList().subList(0,cardsToUse)){
diff --git a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestTribalGeneraterGA.java b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestTribalGeneraterGA.java
index c49fece3438..efb4c9e26b7 100644
--- a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestTribalGeneraterGA.java
+++ b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestTribalGeneraterGA.java
@@ -3,8 +3,7 @@ package forge.planarconquestgenerate;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-
-import com.google.common.collect.Lists;
+import java.util.stream.Collectors;
import forge.GuiDesktop;
import forge.StaticData;
@@ -23,7 +22,6 @@ import forge.item.PaperCardPredicates;
import forge.localinstance.properties.ForgeConstants;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
-import forge.util.Iterables;
public class PlanarConquestTribalGeneraterGA extends PlanarConquestGeneraterGA {
@@ -77,14 +75,13 @@ public class PlanarConquestTribalGeneraterGA extends PlanarConquestGeneraterGA {
cards.add(StaticData.instance().getCommonCards().getUniqueByName(cardName));
}
- Iterable filteredTribe= Iterables.filter(cards,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
+ List filteredListTribe = cards.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS
.and(CardRulesPredicates.hasCreatureType("Pirate"))
- .and(CardRulesPredicates.IS_CREATURE)
- ).and(gameFormat.getFilterPrinted())
- );
+ .and(CardRulesPredicates.IS_CREATURE)))
+ .filter(gameFormat.getFilterPrinted())
+ .collect(Collectors.toList());
- List filteredListTribe = Lists.newArrayList(filteredTribe);
rankedList = CardRanker.rankCardsInDeck(filteredListTribe);
List decks = new ArrayList<>();
for(PaperCard card: rankedList.subList(0,cardsToUse)){
diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java
index dfd2eabe7d0..1afb48d1b44 100644
--- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java
+++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java
@@ -2,7 +2,6 @@ package forge.adventure.util;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
-import com.google.common.collect.Lists;
import forge.StaticData;
import forge.adventure.data.ConfigData;
import forge.adventure.data.GeneratedDeckData;
@@ -27,6 +26,7 @@ import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Predicate;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import static forge.adventure.data.RewardData.generateAllCards;
@@ -804,15 +804,22 @@ public class CardUtil {
}
public static PaperCard getCardByName(String cardName) {
- List validCards = Lists.newArrayList(Iterables.filter(getFullCardPool(Config.instance().getSettingData().useAllCardVariants),
- input -> input.getCardName().equals(cardName)));
+ List validCards;
+ //Faster to ask the CardDB for a card name than it is to search the pool.
+ if (Config.instance().getSettingData().useAllCardVariants)
+ validCards = FModel.getMagicDb().getCommonCards().getAllCards(cardName);
+ else
+ validCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(cardName);
return validCards.get(Current.world().getRandom().nextInt(validCards.size()));
}
public static PaperCard getCardByNameAndEdition(String cardName, String edition) {
- List validCards = Lists.newArrayList(Iterables.filter(getFullCardPool(Config.instance().getSettingData().useAllCardVariants),
- input -> input.getCardName().equals(cardName) && input.getEdition().equals(edition)));
+ List cardPool = Config.instance().getSettingData().useAllCardVariants
+ ? FModel.getMagicDb().getCommonCards().getAllCards(cardName)
+ : FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(cardName);
+ List validCards = cardPool.stream()
+ .filter(input -> input.getEdition().equals(edition)).collect(Collectors.toList());
if (validCards.isEmpty()) {
System.err.println("Unexpected behavior: tried to call getCardByNameAndEdition for card " + cardName + " from the edition " + edition + ", but didn't find it in the DB. A random existing instance will be returned.");
diff --git a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java
index 06ee1d63bfb..57b7bb0e324 100644
--- a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java
+++ b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java
@@ -9,13 +9,11 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import forge.item.PaperCardPredicates;
-import forge.util.Iterables;
import org.apache.commons.lang3.ArrayUtils;
-import com.google.common.collect.Lists;
-
import forge.card.CardRulesPredicates;
import forge.deck.io.CardThemedMatrixIO;
import forge.deck.io.DeckStorage;
@@ -73,9 +71,9 @@ public final class CardRelationMatrixGenerator {
ForgeConstants.DECK_GEN_DIR, false),
true);
- final Iterable cards = Iterables.filter(format.getAllCards(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND));
- List cardList = Lists.newArrayList(cards);
+ List cardList = format.getAllCards().stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .collect(Collectors.toList());
cardList.add(FModel.getMagicDb().getCommonCards().getCard("Wastes"));
Map cardIntegerMap = new HashMap<>();
Map integerCardMap = new HashMap<>();
@@ -88,18 +86,19 @@ public final class CardRelationMatrixGenerator {
for (PaperCard card:cardList){
for (Deck deck:decks){
- if (deck.getMain().contains(card)){
- for (PaperCard pairCard:Iterables.filter(deck.getMain().toFlatList(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))){
- if (!pairCard.getName().equals(card.getName())){
+ if (deck.getMain().contains(card)) {
+ String cardName = card.getName();
+ deck.getMain().toFlatList().stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .filter(pairCard -> !pairCard.getName().equals(cardName))
+ .forEach(pairCard -> {
try {
- int old = matrix[cardIntegerMap.get(card.getName())][cardIntegerMap.get(pairCard.getName())];
- matrix[cardIntegerMap.get(card.getName())][cardIntegerMap.get(pairCard.getName())] = old + 1;
- }catch (NullPointerException ne){
+ int old = matrix[cardIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())];
+ matrix[cardIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())] = old + 1;
+ } catch (NullPointerException ne) {
//Todo: Not sure what was failing here
}
- }
- }
+ });
}
}
}
@@ -142,9 +141,9 @@ public final class CardRelationMatrixGenerator {
true);
//get all cards
- final Iterable cards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCards(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND));
- List cardList = Lists.newArrayList(cards);
+ List cardList = FModel.getMagicDb().getCommonCards().streamUniqueCards()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .collect(Collectors.toList());
cardList.add(FModel.getMagicDb().getCommonCards().getCard("Wastes"));
Map cardIntegerMap = new HashMap<>();
Map integerCardMap = new HashMap<>();
@@ -157,7 +156,7 @@ public final class CardRelationMatrixGenerator {
}
//filter to just legal commanders
- List legends = Lists.newArrayList(Iterables.filter(cardList, format.isLegalCommanderPredicate()));
+ List legends = cardList.stream().filter(format.isLegalCommanderPredicate()).collect(Collectors.toList());
//generate lookups for legends to link commander names to matrix rows
for (int i=0; i cardIntegerMap,
Map legendIntegerMap, int[][] matrix){
- for (PaperCard pairCard:Iterables.filter(deck.getMain().toFlatList(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))){
- if (!pairCard.getName().equals(legend.getName())){
+ String cardName = legend.getName();
+ deck.getMain().toFlatList().stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .filter(pairCard -> !pairCard.getName().equals(cardName))
+ .forEach(pairCard -> {
try {
- int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())];
- matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())] = old + 1;
- }catch (NullPointerException ne){
+ int old = matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())];
+ matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())] = old + 1;
+ } catch (NullPointerException ne) {
//Todo: Not sure what was failing here
ne.printStackTrace();
}
- }
-
- }
+ });
//add partner commanders to matrix
if(deck.getCommanders().size()>1){
for(PaperCard partner:deck.getCommanders()){
if(!partner.equals(legend)){
- int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())];
- matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())] = old + 1;
+ int old = matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(partner.getName())];
+ matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(partner.getName())] = old + 1;
}
}
}
diff --git a/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java b/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java
index faa53cdbcf2..2a53a6d0ae8 100644
--- a/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java
+++ b/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java
@@ -1,9 +1,10 @@
package forge.deck;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import forge.card.CardEdition;
import forge.card.CardRules;
@@ -13,7 +14,6 @@ import forge.item.PaperCard;
import forge.item.PaperCardPredicates;
import forge.model.FModel;
import forge.util.ItemPool;
-import forge.util.Iterables;
/**
* Created by maustin on 09/05/2017.
@@ -23,11 +23,11 @@ public class CommanderDeckGenerator extends DeckProxy implements Comparable uniqueCards;
if (isCardGen){
uniqueCards = new ItemPool<>(PaperCard.class);
String matrixKey = (format.equals(DeckFormat.TinyLeaders) ? DeckFormat.Commander : format).toString(); //use Commander for Tiny Leaders
- HashMap matrixPool = CardRelationMatrixGenerator.cardPools.get(matrixKey);
+ HashMap>> matrixPool = CardRelationMatrixGenerator.cardPools.get(matrixKey);
if (matrixPool != null) {
Iterable legendNames = matrixPool.keySet();
for (String legendName : legendNames) {
@@ -39,18 +39,15 @@ public class CommanderDeckGenerator extends DeckProxy implements Comparable canPlay = isForAi ? DeckGeneratorBase.AI_CAN_PLAY : CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS;
- @SuppressWarnings("unchecked")
- Iterable legends = Iterables.filter(uniqueCards.toFlatList(), format.isLegalCommanderPredicate()
- .and(PaperCardPredicates.fromRules(canPlay)));
- final List decks = new ArrayList<>();
- for (PaperCard legend: legends) {
- decks.add(new CommanderDeckGenerator(legend, format, isForAi, isCardGen));
- }
- return decks;
+ return uniqueCards.toFlatList().stream()
+ .filter(format.isLegalCommanderPredicate())
+ .filter(PaperCardPredicates.fromRules(canPlay))
+ .map(legend -> new CommanderDeckGenerator(legend, format, isForAi, isCardGen))
+ .collect(Collectors.toList());
}
public static List getBrawlDecks(final DeckFormat format, boolean isForAi, boolean isCardGen){
- ItemPool uniqueCards;
+ ItemPool uniqueCards;
if (isCardGen){
uniqueCards = new ItemPool<>(PaperCard.class);
//TODO: update to actual Brawl model from real Brawl decks
@@ -63,14 +60,11 @@ public class CommanderDeckGenerator extends DeckProxy implements Comparable canPlay = isForAi ? DeckGeneratorBase.AI_CAN_PLAY : CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS;
- @SuppressWarnings("unchecked")
- Iterable legends = Iterables.filter(uniqueCards.toFlatList(), format.isLegalCardPredicate()
- .and(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER.and(canPlay))));
- final List decks = new ArrayList<>();
- for (PaperCard legend: legends) {
- decks.add(new CommanderDeckGenerator(legend, format, isForAi, isCardGen));
- }
- return decks;
+ return uniqueCards.toFlatList().stream()
+ .filter(format.isLegalCardPredicate())
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.CAN_BE_BRAWL_COMMANDER.and(canPlay)))
+ .map(legend -> new CommanderDeckGenerator(legend, format, isForAi, isCardGen))
+ .collect(Collectors.toList());
}
private final PaperCard legend;
diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java
index 39e9e6e47b0..0b43529be0b 100644
--- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java
+++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java
@@ -841,7 +841,7 @@ public class DeckgenUtil {
// determine how many additional lands we need, but don't take lands already in deck into consideration,
// or we risk incorrectly determining the target deck size
- int numLands = Iterables.size(Iterables.filter(cards, PaperCardPredicates.fromRules(CardRulesPredicates.IS_LAND)));
+ int numLands = (int) cards.stream().filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_LAND)).count();
int sizeNoLands = cards.size() - numLands;
// attempt to determine if building for sealed, constructed or EDH
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedCommanderDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedCommanderDeckBuilder.java
index 33242ff86b1..c410df4f374 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedCommanderDeckBuilder.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedCommanderDeckBuilder.java
@@ -1,6 +1,7 @@
package forge.gamemodes.limited;
import java.util.List;
+import java.util.stream.Collectors;
import com.google.common.collect.Lists;
@@ -11,7 +12,6 @@ import forge.deck.generation.DeckGenPool;
import forge.item.PaperCard;
import forge.item.PaperCardPredicates;
import forge.model.FModel;
-import forge.util.Iterables;
/**
* Created by maustin on 28/02/2018.
@@ -25,9 +25,9 @@ public class CardThemedCommanderDeckBuilder extends CardThemedDeckBuilder {
secondKeyCard = partner0;
// remove Unplayables
if(isForAI) {
- final Iterable playables = Iterables.filter(availableList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS));
- this.aiPlayables = Lists.newArrayList(playables);
+ this.aiPlayables = availableList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS))
+ .collect(Collectors.toList());
}else{
this.aiPlayables = Lists.newArrayList(availableList);
}
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedConquestDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedConquestDeckBuilder.java
index 214d68ab8b3..1b4cf443bc9 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedConquestDeckBuilder.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedConquestDeckBuilder.java
@@ -1,6 +1,7 @@
package forge.gamemodes.limited;
import java.util.List;
+import java.util.stream.Collectors;
import com.google.common.collect.Lists;
@@ -29,9 +30,9 @@ public class CardThemedConquestDeckBuilder extends CardThemedDeckBuilder {
secondKeyCard = null;
// remove Unplayables
if(isForAI) {
- final Iterable playables = Iterables.filter(availableList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS));
- this.aiPlayables = Lists.newArrayList(playables);
+ this.aiPlayables = availableList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS))
+ .collect(Collectors.toList());
}else{
this.aiPlayables = Lists.newArrayList(availableList);
}
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java
index 64bbf3e007d..ae3349ec1d5 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java
@@ -9,6 +9,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import com.google.common.collect.Lists;
@@ -104,9 +105,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
this.isForAI = isForAI;
// remove Unplayables
if(isForAI) {
- final Iterable playables = Iterables.filter(availableList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS));
- this.aiPlayables = Lists.newArrayList(playables);
+ this.aiPlayables = availableList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_DECKS))
+ .collect(Collectors.toList());
}else{
this.aiPlayables = Lists.newArrayList(availableList);
}
@@ -188,9 +189,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
System.out.println(keyCard.getName());
System.out.println("Colors: " + colors.toEnumSet().toString());
}
- Iterable colorList = Iterables.filter(aiPlayables,
- PaperCardPredicates.fromRules(hasColor));
- rankedColorList = Lists.newArrayList(colorList);
+ rankedColorList = aiPlayables.stream()
+ .filter(PaperCardPredicates.fromRules(hasColor))
+ .collect(Collectors.toList());
onColorCreaturesAndSpells = Iterables.filter(rankedColorList,
PaperCardPredicates.fromRules(CardRulesPredicates.IS_CREATURE
.or(CardRulesPredicates.IS_NON_CREATURE_SPELL)));
@@ -318,11 +319,11 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
//Add remaining non-land colour matching cards to sideboard
final CardPool cp = result.getOrCreate(DeckSection.Sideboard);
- Iterable potentialSideboard = Iterables.filter(aiPlayables,
- PaperCardPredicates.fromRules(hasColor.and(CardRulesPredicates.IS_NON_LAND)));
+ Iterator potentialSideboard = aiPlayables.stream()
+ .filter(PaperCardPredicates.fromRules(hasColor.and(CardRulesPredicates.IS_NON_LAND))).iterator();
int i=0;
- while(i<15 && potentialSideboard.iterator().hasNext()){
- PaperCard sbCard = potentialSideboard.iterator().next();
+ while(i<15 && potentialSideboard.hasNext()){
+ PaperCard sbCard = potentialSideboard.next();
cp.add(sbCard);
aiPlayables.remove(sbCard);
rankedColorList.remove(sbCard);
@@ -398,8 +399,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
}
// Add the second keycard if not land
if(secondKeyCard!=null && !secondKeyCard.getRules().getMainPart().getType().isLand()) {
- Iterable secondKeyCards = Iterables.filter(aiPlayables, PaperCardPredicates.name(secondKeyCard.getName()));
- final List keyCardList = Lists.newArrayList(secondKeyCards);
+ final List keyCardList = aiPlayables.stream()
+ .filter(PaperCardPredicates.name(secondKeyCard.getName()))
+ .collect(Collectors.toList());
deckList.addAll(keyCardList);
aiPlayables.removeAll(keyCardList);
rankedColorList.removeAll(keyCardList);
@@ -418,8 +420,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
}
// Add the deck card
if(secondKeyCard!=null && secondKeyCard.getRules().getMainPart().getType().isLand()) {
- Iterable secondKeyCards = Iterables.filter(aiPlayables, PaperCardPredicates.name(secondKeyCard.getName()));
- final List keyCardList = Lists.newArrayList(secondKeyCards);
+ final List keyCardList = aiPlayables.stream()
+ .filter(PaperCardPredicates.name(secondKeyCard.getName()))
+ .collect(Collectors.toList());
deckList.addAll(keyCardList);
aiPlayables.removeAll(keyCardList);
rankedColorList.removeAll(keyCardList);
@@ -444,7 +447,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
* If evolving wilds is in the deck and there are fewer than 4 spaces for basic lands - remove evolving wilds
*/
protected void checkEvolvingWilds(){
- List evolvingWilds = Lists.newArrayList(Iterables.filter(deckList, PaperCardPredicates.name("Evolving Wilds")));
+ List evolvingWilds = deckList.stream().filter(PaperCardPredicates.name("Evolving Wilds")).collect(Collectors.toList());
if((evolvingWilds.size()>0 && landsNeeded<4 ) || colors.countColors()<2){
deckList.removeAll(evolvingWilds);
landsNeeded=landsNeeded+evolvingWilds.size();
@@ -497,9 +500,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
}
protected void addLowCMCCard(){
- final Iterable nonLands = Iterables.filter(rankedColorList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_NON_LAND));
- final PaperCard card = Iterables.getFirst(nonLands, null);
+ final PaperCard card = rankedColorList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_NON_LAND))
+ .findFirst().orElse(null);
if (card != null) {
deckList.add(card);
aiPlayables.remove(card);
@@ -665,17 +668,10 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
* counts of lands needed, by color
*/
private void addLands(final int[] clrCnts) {
- // basic lands that are available in the deck
- final Iterable basicLands = Iterables.filter(aiPlayables, PaperCardPredicates.fromRules(CardRulesPredicates.IS_BASIC_LAND));
-
// total of all ClrCnts
int totalColor = 0;
- int numColors = 0;
for (int i = 0; i < 5; i++) {
totalColor += clrCnts[i];
- if (clrCnts[i] > 0) {
- numColors++;
- }
}
// add one of each land required first so that any rounding errors do not remove the only land of a colour
for (int i = 0; i < 5; i++) {
@@ -821,9 +817,6 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
minBasics=Math.round((MyRandom.getRandom().nextInt(8)+6)*((float) targetSize) / 60);
}
- lands = Iterables.filter(aiPlayables,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_NONBASIC_LAND));
-
for (final PaperCard card : lands) {
if (landsNeeded > minBasics) {
// Use only lands that are within our colors
@@ -922,16 +915,10 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
for (int i = 1; i < 7; i++) {
creatureCosts.put(i, 0);
}
- final Predicate filter = PaperCardPredicates.fromRules(CardRulesPredicates.IS_CREATURE);
- for (final IPaperCard creature : Iterables.filter(deckList, filter)) {
- int cmc = creature.getRules().getManaCost().getCMC();
- if (cmc < 1) {
- cmc = 1;
- } else if (cmc > 6) {
- cmc = 6;
- }
- creatureCosts.put(cmc, creatureCosts.get(cmc) + 1);
- }
+ deckList.stream().filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_CREATURE))
+ .mapToInt(c -> c.getRules().getManaCost().getCMC())
+ .map(cmc -> Math.min(Math.max(cmc, 1), 6))
+ .forEach(cmc -> creatureCosts.put(cmc, creatureCosts.get(cmc) + 1));
List creaturesToAdd = new ArrayList<>();
for (final PaperCard card : creatures) {
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java
index 9e2e09d4fc0..9959ce4fdfb 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java
@@ -2,6 +2,7 @@ package forge.gamemodes.limited;
import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import com.google.common.collect.Lists;
@@ -76,15 +77,15 @@ public class LimitedDeckBuilder extends DeckGeneratorBase {
this.colors = pClrs.getChosenColors();
// remove Unplayables
- final Iterable playables = Iterables.filter(availableList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_LIMITED_DECKS));
- this.aiPlayables = Lists.newArrayList(playables);
+ this.aiPlayables = availableList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_KEPT_IN_AI_LIMITED_DECKS))
+ .collect(Collectors.toList());
this.availableList.removeAll(aiPlayables);
// keep Conspiracies in a separate list
- final Iterable conspiracies = Iterables.filter(aiPlayables,
- PaperCardPredicates.fromRules(CardRulesPredicates.coreType(true, "Conspiracy")));
- this.draftedConspiracies = Lists.newArrayList(conspiracies);
+ this.draftedConspiracies = aiPlayables.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.coreType(true, "Conspiracy")))
+ .collect(Collectors.toList());
this.aiPlayables.removeAll(draftedConspiracies);
findBasicLandSets();
@@ -164,9 +165,9 @@ public class LimitedDeckBuilder extends DeckGeneratorBase {
// 6. If there are still on-color cards, and the average cmc is low, add
// an extra.
if (deckList.size() == numSpellsNeeded && getAverageCMC(deckList) < 4) {
- final Iterable nonLands = Iterables.filter(rankedColorList,
- PaperCardPredicates.fromRules(CardRulesPredicates.IS_NON_LAND));
- final PaperCard card = Iterables.getFirst(nonLands, null);
+ final PaperCard card = rankedColorList.stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_NON_LAND))
+ .findFirst().orElse(null);
if (card != null) {
deckList.add(card);
aiPlayables.remove(card);
@@ -665,15 +666,10 @@ public class LimitedDeckBuilder extends DeckGeneratorBase {
creatureCosts.put(i, 0);
}
final Predicate filter = PaperCardPredicates.fromRules(CardRulesPredicates.IS_CREATURE);
- for (final IPaperCard creature : Iterables.filter(deckList, filter)) {
- int cmc = creature.getRules().getManaCost().getCMC();
- if (cmc < 1) {
- cmc = 1;
- } else if (cmc > 6) {
- cmc = 6;
- }
- creatureCosts.put(cmc, creatureCosts.get(cmc) + 1);
- }
+ deckList.stream().filter(filter)
+ .mapToInt(creature -> creature.getRules().getManaCost().getCMC())
+ .map(cmc -> Math.max(1, Math.min(cmc, 6)))
+ .forEach(cmc -> creatureCosts.put(cmc, creatureCosts.get(cmc) + 1));
List creaturesToAdd = new ArrayList<>();
for (final PaperCard card : creatures) {
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java
index 3043e2ff9df..bac699548a2 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java
@@ -14,6 +14,7 @@ import forge.util.Iterables;
import forge.util.TextUtil;
import java.util.*;
+import java.util.stream.Collectors;
public class LimitedPlayer {
// A Player class for inside some type of limited environment, like Draft.
@@ -731,7 +732,9 @@ public class LimitedPlayer {
public void addSingleBoosterPack() {
// if this is just a normal draft, allow picking a pack from any set
// If this is adventure or quest or whatever then we should limit it to something
- List possibleEditions = Lists.newArrayList(Iterables.filter(FModel.getMagicDb().getEditions(), CardEdition.Predicates.CAN_MAKE_BOOSTER));
+ List possibleEditions = FModel.getMagicDb().getEditions().stream()
+ .filter(CardEdition.Predicates.CAN_MAKE_BOOSTER)
+ .collect(Collectors.toList());
CardEdition edition = chooseEdition(possibleEditions);
if (edition == null) {
addLog(name() + " chose not to add a booster pack to the draft.");
diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/WinstonDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/WinstonDraft.java
index ec0439ce7b2..89b7470cdba 100644
--- a/forge-gui/src/main/java/forge/gamemodes/limited/WinstonDraft.java
+++ b/forge-gui/src/main/java/forge/gamemodes/limited/WinstonDraft.java
@@ -10,7 +10,6 @@ import forge.deck.CardPool;
import forge.deck.Deck;
import forge.item.PaperCard;
import forge.item.PaperCardPredicates;
-import forge.util.Iterables;
import forge.util.MyRandom;
public class WinstonDraft extends BoosterDraft {
@@ -41,9 +40,9 @@ public class WinstonDraft extends BoosterDraft {
for (final Supplier> supply : this.product) {
for (int j = 0; j < NUM_PLAYERS; j++) {
// Remove Basic Lands from draft for simplicity
- for (final PaperCard paperCard : Iterables.filter(supply.get(), PaperCardPredicates.IS_BASIC_LAND.negate())) {
- this.deck.add(paperCard);
- }
+ supply.get().stream()
+ .filter(PaperCardPredicates.IS_BASIC_LAND.negate())
+ .forEach(this.deck::add);
}
}
Collections.shuffle(this.deck, MyRandom.getRandom());
diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java
index 881255a3316..195a6bdbe8d 100644
--- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java
+++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestUtil.java
@@ -156,7 +156,7 @@ public class ConquestUtil {
if (colorIdentity != MagicColor.ALL_COLORS) {
Predicate pred = DeckFormat.Commander.isLegalCardForCommanderPredicate(deck.getCommanders());
- availableCards.retainAll(Lists.newArrayList(Iterables.filter(availableCards, pred)));
+ availableCards.removeIf(pred.negate());
}
//create pool from available cards
diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java
index 6968cbaa095..9612e1c249a 100644
--- a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java
+++ b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java
@@ -21,14 +21,13 @@ import static forge.gamemodes.quest.QuestUtilCards.isLegalInQuestFormat;
import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import forge.item.*;
import forge.util.Iterables;
import forge.util.Predicates;
import org.apache.commons.lang3.StringUtils;
-import com.google.common.collect.Lists;
-
import forge.card.CardEdition;
import forge.card.CardRules;
import forge.card.CardRulesPredicates;
@@ -121,7 +120,7 @@ public final class BoosterUtils {
filter = formatStartingPool.getFilterPrinted();
}
- final List cardPool = Lists.newArrayList(Iterables.filter(FModel.getMagicDb().getCommonCards().getAllNonPromoCards(), filter));
+ final List cardPool = FModel.getMagicDb().getCommonCards().streamAllNonPromoCards().filter(filter).collect(Collectors.toList());
if (userPrefs != null && userPrefs.grantCompleteSet()) {
for (PaperCard card : cardPool) {
@@ -304,7 +303,7 @@ public final class BoosterUtils {
Predicate predicateRules = CardRulesPredicates.cost(StringOp.CONTAINS_IC, "p/");
Predicate predicateCard = PaperCardPredicates.fromRules(predicateRules);
- int size = Iterables.size(Iterables.filter(cardPool, predicateCard));
+ int size = (int) cardPool.stream().filter(predicateCard).count();
int totalSize = cardPool.size();
double phyrexianAmount = (double) size / totalSize;
@@ -326,7 +325,7 @@ public final class BoosterUtils {
//Adjust for the number of multicolored possibilities. This prevents flooding of non-selected
//colors if multicolored cards aren't in the selected sets. The more multi-colored cards in the
//sets, the more that will be selected.
- if (usedMulticolor / 8 < Iterables.size(Iterables.filter(cardPool, predicateCard))) {
+ if (usedMulticolor / 8 < cardPool.stream().filter(predicateCard).count()) {
colorFilters.add(predicateRules);
usedMulticolor++;
} else {
@@ -490,7 +489,7 @@ public final class BoosterUtils {
PrintSheet ps = new PrintSheet("Quest rewards");
Predicate predicate = preds.size() == 1 ? preds.get(0) : Predicates.and(preds);
- ps.addAll(Iterables.filter(FModel.getMagicDb().getCommonCards().getAllNonPromoCards(), predicate));
+ FModel.getMagicDb().getCommonCards().streamAllNonPromoCards().filter(predicate).forEach(ps::add);
rewards.addAll(ps.random(qty, true));
} else if (temp.length == 2 && temp[0].equalsIgnoreCase("duplicate") && temp[1].equalsIgnoreCase("card")) {
// Type 2: a duplicate card of the players choice
diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardChooser.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardChooser.java
index 29cb0ff13b1..f194ea29cf8 100644
--- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardChooser.java
+++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardChooser.java
@@ -9,7 +9,6 @@ import java.util.function.Predicate;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.util.ItemPool;
-import forge.util.Iterables;
/**
* Resolves a card chooser InventoryItem into a CardPrinted.
@@ -109,10 +108,8 @@ public class QuestRewardCardChooser extends QuestRewardCard {
} else if (type == poolType.predicateFilter) {
List cardChoices = new ArrayList<>();
- for (final PaperCard card : Iterables.filter(FModel.getMagicDb().getCommonCards().getAllCards(), predicates)) {
- cardChoices.add(card);
- }
- Collections.sort(cardChoices);
+ FModel.getMagicDb().getCommonCards().streamAllCards().filter(predicates)
+ .sorted().forEach(cardChoices::add); //TODO: Once java is at 10+, can use Collectors.toUnmodifiableList
return Collections.unmodifiableList(cardChoices);
} else {
diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardFiltered.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardFiltered.java
index d14fe24078f..7e69b107121 100644
--- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardFiltered.java
+++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCardFiltered.java
@@ -7,7 +7,6 @@ import java.util.function.Predicate;
import forge.item.PaperCard;
import forge.model.FModel;
-import forge.util.Iterables;
/**
* Allows the player to choose a card from a predicate-filtered list of cards.
@@ -60,10 +59,8 @@ public class QuestRewardCardFiltered extends QuestRewardCard {
@Override
public final List getChoices() {
List cardChoices = new ArrayList<>();
- for (final PaperCard card : Iterables.filter(FModel.getMagicDb().getCommonCards().getAllCards(), predicates)) {
- cardChoices.add(card);
- }
- Collections.sort(cardChoices);
+ FModel.getMagicDb().getCommonCards().streamAllCards().filter(predicates)
+ .sorted().forEach(cardChoices::add); //TODO: Once java is at 10+, can use Collectors.toUnmodifiableList
return Collections.unmodifiableList(cardChoices);
}
diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java
index f948eb26b79..5881ea1cd2b 100644
--- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java
+++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java
@@ -47,6 +47,7 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
/**
* This is a helper class to execute operations on QuestData. It has been
@@ -111,10 +112,10 @@ public final class QuestUtilCards {
wastesCodes.add("OGW");
}
} else {
- Iterable allEditions = FModel.getMagicDb().getEditions();
- for (CardEdition edition : Iterables.filter(allEditions, CardEdition.Predicates.hasBasicLands)) {
- landCodes.add(edition.getCode());
- }
+ FModel.getMagicDb().getEditions().stream()
+ .filter(CardEdition.Predicates.hasBasicLands)
+ .map(CardEdition::getCode)
+ .forEach(landCodes::add);
snowLandCodes.add("ICE");
snowLandCodes.add("CSP");
snowLandCodes.add("KHM");
@@ -667,12 +668,9 @@ public final class QuestUtilCards {
if (questController.getFormat() != null) {
formatFilter = formatFilter.and(isLegalInQuestFormat(questController.getFormat()));
}
- Iterable rightEditions = Iterables.filter(FModel.getMagicDb().getEditions(), formatFilter);
- List editions = new ArrayList<>();
- for (CardEdition e : rightEditions) {
- editions.add(e);
- }
+ List editions = FModel.getMagicDb().getEditions().stream()
+ .filter(formatFilter).collect(Collectors.toList());
Collections.shuffle(editions);
diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java
index 50d47dce45e..bb039b17b85 100644
--- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java
+++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java
@@ -1805,16 +1805,12 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
@Override
public ICardFace chooseSingleCardFace(final SpellAbility sa, final String message, final Predicate cpp,
final String name) {
- final Iterable cardsFromDb = FModel.getMagicDb().getCommonCards().getAllFaces();
- final List cards = Lists.newArrayList(Iterables.filter(cardsFromDb, cpp));
- CardFaceView cardFaceView;
- List choices = new ArrayList<>();
- for (ICardFace cardFace : cards) {
- cardFaceView = new CardFaceView(CardTranslation.getTranslatedName(cardFace.getName()), cardFace.getName());
- choices.add(cardFaceView);
- }
- Collections.sort(choices);
- cardFaceView = getGui().one(message, choices);
+ List choices = FModel.getMagicDb().getCommonCards().streamAllFaces()
+ .filter(cpp)
+ .map(cardFace -> new CardFaceView(CardTranslation.getTranslatedName(cardFace.getName()), cardFace.getName()))
+ .sorted()
+ .collect(Collectors.toList());
+ CardFaceView cardFaceView = getGui().one(message, choices);
return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getOracleName());
}
diff --git a/forge-lda/src/main/java/forge/lda/LDAModelGenetrator.java b/forge-lda/src/main/java/forge/lda/LDAModelGenetrator.java
index 070f476b399..c6a1dee9ecf 100644
--- a/forge-lda/src/main/java/forge/lda/LDAModelGenetrator.java
+++ b/forge-lda/src/main/java/forge/lda/LDAModelGenetrator.java
@@ -1,7 +1,5 @@
package forge.lda;
-import com.google.common.collect.Lists;
-
import forge.GuiDesktop;
import forge.StaticData;
import forge.card.CardRulesPredicates;
@@ -19,7 +17,6 @@ import forge.item.PaperCard;
import forge.localinstance.properties.ForgeConstants;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
-import forge.util.Iterables;
import forge.util.storage.IStorage;
import forge.util.storage.StorageImmediatelySerialized;
import org.apache.commons.lang3.ArrayUtils;
@@ -27,6 +24,7 @@ import org.apache.commons.lang3.tuple.Pair;
import java.io.File;
import java.util.*;
+import java.util.stream.Collectors;
import static forge.lda.lda.inference.InferenceMethod.CGS;
@@ -290,9 +288,9 @@ public final class LDAModelGenetrator {
true);
//get all cards
- final Iterable cards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCards(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND));
- List cardList = Lists.newArrayList(cards);
+ List cardList = FModel.getMagicDb().getCommonCards().streamUniqueCards()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .collect(Collectors.toList());
cardList.add(FModel.getMagicDb().getCommonCards().getCard("Wastes"));
Map cardIntegerMap = new HashMap<>();
Map integerCardMap = new HashMap<>();
@@ -305,9 +303,9 @@ public final class LDAModelGenetrator {
}
//filter to just legal commanders
- List legends = Lists.newArrayList(Iterables.filter(cardList, PaperCardPredicates.fromRules(
- DeckFormat.Commander::isLegalCommander))
- );
+ List legends = cardList.stream()
+ .filter(PaperCardPredicates.fromRules(DeckFormat.Commander::isLegalCommander))
+ .collect(Collectors.toList());
//generate lookups for legends to link commander names to matrix rows
for (int i=0; i cardIntegerMap,
Map legendIntegerMap, int[][] matrix){
- for (PaperCard pairCard:Iterables.filter(deck.getMain().toFlatList(),
- PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))){
- if (!pairCard.getName().equals(legend.getName())){
+ String cardName = legend.getName();
+ deck.getMain().toFlatList().stream()
+ .filter(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_TRUE_BASIC_LAND))
+ .filter(PaperCardPredicates.name(cardName).negate())
+ .forEach(pairCard -> {
try {
- int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())];
- matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())] = old + 1;
+ int old = matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())];
+ matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(pairCard.getName())] = old + 1;
}catch (NullPointerException ne){
//TODO: Not sure what was failing here
ne.printStackTrace();
}
- }
-
- }
+ });
//add partner commanders to matrix
if(deck.getCommanders().size()>1){
for(PaperCard partner:deck.getCommanders()){
if(!partner.equals(legend)){
- int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())];
- matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())] = old + 1;
+ int old = matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(partner.getName())];
+ matrix[legendIntegerMap.get(cardName)][cardIntegerMap.get(partner.getName())] = old + 1;
}
}
}