Java 检查列表是否包含数组的所有元素

Java 检查列表是否包含数组的所有元素,java,arrays,list,Java,Arrays,List,我试图检查列表是否包含保存在数组中的所有值 这是我的密码: List<PlayingCard> playerDeck = new ArrayList<>(); playerDeck.add(PlayingCard.METAL); playerDeck.add(PlayingCard.METAL); public boolean canBuild(Item item) { return playerDeck.containsAll(Arrays.asList(it

我试图检查列表是否包含保存在数组中的所有值

这是我的密码:

List<PlayingCard> playerDeck = new ArrayList<>();
playerDeck.add(PlayingCard.METAL);
playerDeck.add(PlayingCard.METAL);

public boolean canBuild(Item item) {
    return playerDeck.containsAll(Arrays.asList(item.requiredCards()));
}
我当前的canBuild()方法不能像这样工作

playerDeck = [Metal] requiredCards = [Metal, Metal]
playerDeck.containsAll(requiredCards) == true

有人能帮我吗?

您没有正确声明一个枚举。还不清楚您是否试图在静态上下文中执行该方法。请尝试以下操作:

enum PlayingCard {
    METAL
}

enum Item {
    FOO;

    public PlayingCard[] requiredCards() {
        return new PlayingCard[] { PlayingCard.METAL,
                PlayingCard.METAL, PlayingCard.METAL };
    }
}

static List<PlayingCard> playerDeck = new ArrayList<>();

public static void main(String[] args) {

    playerDeck.add(PlayingCard.METAL);
    playerDeck.add(PlayingCard.METAL);
    Item foo = Item.FOO;
    System.out.println(canBuild(foo));

}

public static boolean canBuild(Item item) {
    return playerDeck
            .containsAll(Arrays.asList(item.requiredCards()));
}
enum播放卡{
金属
}
枚举项{
傅;
公共播放卡[]所需卡(){
返回新的PlayingCard[]{PlayingCard.METAL,
PlayingCard.METAL,PlayingCard.METAL};
}
}
静态列表playerDeck=newarraylist();
公共静态void main(字符串[]args){
playerDeck.add(PlayingCard.METAL);
playerDeck.add(PlayingCard.METAL);
Item foo=Item.foo;
System.out.println(canBuild(foo));
}
公共静态布尔canBuild(项){
返回playerDeck
.containsAll(Arrays.asList(item.requiredCards());
}
更新:

 List<Integer> a = List.of(1,1,1);
 List<Integer> b = List.of(1,1);
 List<Integer> c = List.of(1,1,1);
 List<Integer> d = List.of(1,2,1);
 List<Integer> e = List.of(1,1,2);
 System.out.println(a.equals(b)); //false different count
 System.out.println(a.equals(c)); //true same numbers and count
 System.out.println(a.equals(d));// false same count, different numbers
 System.out.println(a.equals(e)); // false same numbers and count, different order
List a=List.of(1,1,1);
列表b=列表(1,1);
列表c=列表(1,1,1);
列表d=列表(1,2,1);
列表e=列表(1,1,2);
系统输出println(a等于(b))//假不同计数
系统输出println(a等于(c))//相同的数字和计数
System.out.println(a.equals(d));//错误相同计数,不同数字
System.out.println(a.equals(e));//错误相同的数字和计数,不同的顺序

我想你没有正确理解我的问题。我的问题是我当前的canBuild方法没有考虑元素的数量。因此,如果playerDeck仅包含一个金属项,而item.requiredCards包含3个金属项,则仍将返回true。因此,在这种情况下不能使用containsAll。然而,我不确定我应该如何实现这个方法。谢谢你的尝试。如果你有两个列表,并且它们的值以相同的顺序排列,它们将进行相等的比较,如果这有帮助的话。是的,但是我如何比较两个列表中不同数量的相同元素呢?一个有金属,另一个有金属,金属。他们不应该平等比较。请参阅我的最新答案。
 List<Integer> a = List.of(1,1,1);
 List<Integer> b = List.of(1,1);
 List<Integer> c = List.of(1,1,1);
 List<Integer> d = List.of(1,2,1);
 List<Integer> e = List.of(1,1,2);
 System.out.println(a.equals(b)); //false different count
 System.out.println(a.equals(c)); //true same numbers and count
 System.out.println(a.equals(d));// false same count, different numbers
 System.out.println(a.equals(e)); // false same numbers and count, different order