diff --git a/forge-core/src/main/java/forge/util/ItemPool.java b/forge-core/src/main/java/forge/util/ItemPool.java index b3ab7cdae17..fded45d31ec 100644 --- a/forge-core/src/main/java/forge/util/ItemPool.java +++ b/forge-core/src/main/java/forge/util/ItemPool.java @@ -18,15 +18,11 @@ package forge.util; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Predicate; +import java.util.function.*; +import java.util.stream.Collector; import com.google.common.collect.Maps; import forge.item.InventoryItem; @@ -74,6 +70,37 @@ public class ItemPool implements Iterable Collector> collector(Class cls) { + return new Collector, ItemPool>() { + @Override + public Supplier> supplier() { + return () -> new ItemPool(cls); + } + + @Override + public BiConsumer, InventoryItem> accumulator() { + return (pool, item) -> { + if (cls.isInstance(item)) pool.add(cls.cast(item), 1); + }; + } + + @Override + public BinaryOperator> combiner() { + return (first, second) -> { + first.addAll(second); + return first; + }; + } + + @Override public Function, ItemPool> finisher() { + return Function.identity(); + } + @Override public Set characteristics() { + return EnumSet.of(Characteristics.IDENTITY_FINISH); + } + }; + } + protected ItemPool(final Map items0, final Class cls) { if (items0 != null) { items = items0; diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorVariant.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorVariant.java index 228047427b5..872daa9655c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorVariant.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorVariant.java @@ -141,10 +141,10 @@ public final class CEditorVariant extends CDeckEditor { */ @Override public void resetTables() { - Iterable allNT = FModel.getMagicDb().getVariantCards().getAllCards(); - allNT = Iterables.filter(allNT, cardPoolCondition); + ItemPool allNT = FModel.getMagicDb().getVariantCards().streamAllCards() + .filter(cardPoolCondition).collect(ItemPool.collector(PaperCard.class)); - this.getCatalogManager().setPool(ItemPool.createFrom(allNT, PaperCard.class), true); + this.getCatalogManager().setPool(allNT, true); this.getDeckManager().setPool(this.controller.getModel().getOrCreate(this.sectionMode)); }