CandidateList是一个由候选人姓名组成的列表。选票是一个字符串列表。我想检查选票列表上的第一个名字是否与candidateList上的任何名字相同。如果没有,那么我想检查选票上的下一个字符串,看看该字符串是否与candidateList上的任何名称相同。等等......
/**
* @param candidateList a list of candidate names
* @return the name of the first choice candidate for this Ballot from those
* in candidateList
*/
public String firstChoiceFrom(ArrayList<String> candidateList) {
String firstChoice = "";
String candidate = "";
for (int can = 0; can < candidateList.size(); can++) {
String bal = ballot.get(can); // gets next ballot
candidate = candidateList.get(can); // gets next candidate
while (!candidate.equals(bal))
{
}
//checks to see whether the first name on the ballot
if (candidate.equals(bal)) {
return candidate;
}
}
答案 0 :(得分:3)
如果要比较两个列表并仅保留常用列表。就像你在一篇评论中提到的那样
我想做的就是返回两个列表都有的字符串。
你可以在下面做:
list1.retainAll(list2); // This will keep all elements that matches list 2 and remove other
for(String word: list1)
{
System.out.println(word); //it will print all words in list 1
}
修改:回答您的评论。是的,你可以一个一个地做,但不推荐它,因为列表有函数retainAll
逐一比较就是这样:
for(String word : list1) //for each string in list 1
{
if list2.contains(word); // if list2 has the string
{
list3.add(word); // add it in new list
}
}
然后你可以打印如上所示的列表3
答案 1 :(得分:1)
如果找到匹配项,您想要做什么?
for(String s : list1){
if(list2.contains(s)){
// set a flag and break
}
}
这个块基本上迭代列表一检查String是否包含在列表2中。可以根据你想要实现的目标来改进代码。
根据要求进行编辑
List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> list2= new ArrayList<String>();
list2.add("11");
list2.add("12");
list2.add("3");
List<String> list3 = new ArrayList<String>(list2);
list3.retainAll(list1);
System.out.println(list3);
//if you dont mind replacing your initial list, then you can use
list1.retainAll(list2);
System.out.println(list1);
答案 2 :(得分:0)
你想要解决这个问题的方式是你如何形容它:对于你投票箱中的每一张选票,如果选票与候选人的名字相符,那么我们想要返回它。
如果我们找不到任何内容,请返回null
。现实中,我们无能为力。请注意,这并不包括重复项(即投票箱中有两个具有相同名称的候选人),尽管可以进行简单的修改以允许它覆盖该案例。
for(String ballot : ballotBox) {
if (candidateList.contains(ballot)) {
return ballot;
}
}
return null;