如何判断一个arraylist是否缺少一个数组中的一个元素?

时间:2017-08-06 20:02:32

标签: java arrays arraylist

我有一个名为'hand'的String arraylist,它从3个不同的String数组,PEOPLE,WEAPONS和ROOMS中获取随机元素。有什么方法可以确定arraylist是否包含每个类别中的一个元素?因此,如果'hand'包含String数组ROOMS中的9个字符串中的8个,它将返回该数组不具有的字符串?只有当'hand'缺少指定数组中的1个元素时,才应该使用此方法。如果它缺少指定数组中的多个元素,则它不应该执行任何操作。

import java.util.ArrayList;
import java.util.List;

public class Main {

public List<String> hand = new ArrayList<String>();

public final static String[] PEOPLE = new String[] {
        "Miss. Scarlet",
        "Mrs. Peacock",
        "Colonel Mustard",
        "Professor Plum",
        "Mrs. White",
        "Mr. Green"
    };

public final static String[] WEAPONS = new String[] {
        "Wrench",
        "Candlestick",
        "Pipe",
        "Rope",
        "Revolver",
        "Knife"
    };

public final static String[] ROOMS = new String[] {
        "Library",
        "Kitchen",
        "Study",
        "Conservatory",
        "Ballroom",
        "Lounge",
        "Hall",
        "Billiard Room",
        "Dining Room"
    };

public Main() {
    hand.add("Library");
    hand.add("Lounge");
    hand.add("Wrench");
    hand.add("Miss. Scarlet");
    hand.add("Mrs. Peacock");
    hand.add("Colonel Mustard");
    hand.add("Professor Plum");
    hand.add("Mrs. White");
}

public static void main(String[] args) {
    Main main = new Main();
}
}

2 个答案:

答案 0 :(得分:1)

我想这就是您要寻找的:在removeAll()上使用List方法。 因此,使用List将数组转换为Arrays.asList(..)。 比以前每个阵列的removeAll手收集。如果剩余List的大小为1 - 这就是您要查找的内容。

List<String> peoples = new ArrayList<>(Arrays.asList(PEOPLE));
peoples.removeAll(hands);
if (peoples.size() == 1)
{
    // here your hands List contained all items from PEOPLE, except 1
}

答案 1 :(得分:0)

  1. 声明一个带有两个参数的方法:常量列表和你的手,它将返回String:手中缺少的String元素,如果它是最后一个缺失或否则null

  2. 每次传递你的手牌和三个常数列表中的一个时,调用此方法三次。

  3. 这就是全部。 在代码中它可以给出:

    public String findLastMissingElement(String[] constants, List<String> hand){
       String missingElement = null;
       for (String constant : constants){
    
           if (!hand.contains(constant) && missingElement==null){ 
              missingElement = constant;
           }
           else if (!hand.contains(constant)){ 
             return null;
           }
       }
       return missingElement;
    }
    

    你可以这样称呼它:

    String missingPeople = findLastMissingElement(PEOPLE, hand);
    String missingWeapon = findLastMissingElement(WEAPONS, hand);
    String missingRoom = findLastMissingElement(ROOMS, hand);