我有一个名为'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();
}
}
答案 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)
声明一个带有两个参数的方法:常量列表和你的手,它将返回String
:手中缺少的String
元素,如果它是最后一个缺失或否则null
。
每次传递你的手牌和三个常数列表中的一个时,调用此方法三次。
这就是全部。 在代码中它可以给出:
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);