diff --git a/src/main/java/forge/item/CardDb.java b/src/main/java/forge/item/CardDb.java index 502840153df..d68806251b3 100644 --- a/src/main/java/forge/item/CardDb.java +++ b/src/main/java/forge/item/CardDb.java @@ -39,6 +39,7 @@ import forge.Singletons; import forge.card.CardInSet; import forge.card.CardRules; import forge.card.MtgDataParser; +import forge.util.Aggregates; /** @@ -393,22 +394,13 @@ public final class CardDb { } else { // OK, plain name here final Predicate predicate = CardPrinted.Predicates.name(nameWithSet.left); - final List namedCards = Lists.newArrayList(Iterables.filter(this.allCardsFlat, predicate)); - if (namedCards.isEmpty()) { + final Iterable namedCards = Iterables.filter(this.allCardsFlat, predicate); + // Find card with maximal set index + result = Aggregates.itemWithMax(namedCards, CardPrinted.FN_GET_EDITION_INDEX); + if (null == result) { throw new NoSuchElementException(String.format("Card '%s' not found in our database.", name)); } - - // Find card with maximal set index - result = namedCards.get(0); - int resIndex = Singletons.getModel().getEditions().get((result).getEdition()).getIndex(); - for (final CardPrinted card : namedCards) { - - final int thisIndex = Singletons.getModel().getEditions().get((card).getEdition()).getIndex(); - if (thisIndex > resIndex) { - result = card; - resIndex = thisIndex; - } - } + } } if (isFoil) { diff --git a/src/main/java/forge/item/CardPrinted.java b/src/main/java/forge/item/CardPrinted.java index c49c90dd687..496c2f448ac 100644 --- a/src/main/java/forge/item/CardPrinted.java +++ b/src/main/java/forge/item/CardPrinted.java @@ -29,6 +29,7 @@ import com.google.common.base.Predicate; import forge.AllZone; import forge.Card; import forge.CardUtil; +import forge.Singletons; import forge.card.CardRarity; import forge.card.CardRules; import forge.game.player.Player; @@ -176,6 +177,13 @@ public final class CardPrinted implements Comparable, InventoryItem } }; + public static final Function FN_GET_EDITION_INDEX = new Function() { + @Override + public Integer apply(final CardPrinted from) { + return Integer.valueOf(Singletons.getModel().getEditions().get(from.getEdition()).getIndex()); + } + }; + // Constructor is private. All non-foiled instances are stored in CardDb private CardPrinted(final CardRules c, final String edition0, final CardRarity rare, final int index, final boolean foil) { this.card = c;