如何根据属性值从Set中删除元素?

时间:2017-10-27 15:23:04

标签: java oop collections

我在课堂上有一个静态List<Set<Cards>>的所有卡片。 card对象有2个变量,String suit和int值。我正在创建一组52张卡,我在上面的静态参数中初始化了8个这样的集合的列表。

我从列表中选择一组并从集合中删除一张卡片。现在,如果我检查列表以查看它是否已被删除,则不会反映从该集合中删除我的卡片对象。

如何从List<Set<Cards>>变量中删除卡片,以便在其他地方使用变量时反映这些更改。

public class Test {
  static Shoe shoe = new Shoe();
  static List < Set < Card >> listofdecks;

  public static void main(String[] args) {
    int count = 0;
    listofdecks = new ArrayList < > (shoe.getDecklist());

    for (Set < Card > cards: listofdecks)
      for (Card c: cards)
        count++;
    System.out.println(count);

    listofdecks.get(0).remove(0);

    count = 0;
    for (Set < Card > cards: listofdecks)
      for (Card c: cards)
        count++;

    System.out.println(count);

  }
}

public class Shoe {


  private static Deck deck;
  private static List < Set < Card >> decklist;


  public Shoe() {
    setDecklist();
  }
  public static void setDecklist(List < Set < Card >> decklist) {
    Shoe.decklist = decklist;
  }

  public static Deck getDeck() {
    return deck;
  }

  public static void setDeck(Deck deck) {
    Shoe.deck = deck;
  }

  public static List < Set < Card >> getDecklist() {
    return decklist;
  }

  public static void setDecklist() {
    decklist = new ArrayList < > ();
    deck = new Deck();
    for (int i = 0; i < 8; i++)
      decklist.add(Deck.getNewDeck());
  }

}

2 个答案:

答案 0 :(得分:2)

当您使用listofdecks.get(0).remove(0);来自boolean remove(Object o);界面时调用Set<>。这意味着您尝试从Integer集合中删除Card。这就是没有任何反应的原因。

答案 1 :(得分:0)

正如dehasi所提到的,java set的remove函数需要一个要删除的对象。虽然在迭代时无法删除对象,但可以通过对列表和set使用迭代器来删除对象。