Java arraylist中的唯一值

Java arraylist中的唯一值,java,collections,arraylist,Java,Collections,Arraylist,我有一个包含对象数组的数组列表。对象有2个值。一个是问题,另一个是答案。对于n个问题,有可能得到相同的答案。换句话说,答案级别上存在重复项。我想从数组列表中画5个对象,它们的答案完全不同 你能教我一些技巧吗 ArrayList<ToughQuiz> animalQuizCollection; animalQuizCollection = new ArrayList<ToughQuiz>(); for(int i=0; i<animalQuest

我有一个包含对象数组的数组列表。对象有2个值。一个是问题,另一个是答案。对于n个问题,有可能得到相同的答案。换句话说,答案级别上存在重复项。我想从数组列表中画5个对象,它们的答案完全不同

你能教我一些技巧吗

ArrayList<ToughQuiz> animalQuizCollection;

    animalQuizCollection  = new ArrayList<ToughQuiz>(); 
    for(int i=0; i<animalQuestionCount;i++){  
        toughQuiz =  new ToughQuiz(animalQuestion[i], animalAnswer[i]);  
        animalQuizCollection.add(toughQuiz);     
    }  
arraylistanimalquizcollection;
animalQuizCollection=newarraylist();

对于(int i=0;i进行循环以验证答案不在ArrayList中

ArrayList<ToughQuiz> animalQuizCollection;
boolean find=false;
    animalQuizCollection  = new ArrayList<ToughQuiz>(); 
    for(int i=0; i<animalQuestionCount;i++){
        for(int j=0; j<animalQuizCollection ; j++) {
             if(animalAnswer[i].equals( animalQuizCollection.get(j).getAnswer() ) {
                   find = true;
                   break;
             }
             else
                  find = false;
        }
        if(!find) {   
            toughQuiz =  new ToughQuiz(animalQuestion[i], animalAnswer[i]);
            animalQuizCollection.add(toughQuiz);  
        }   
    } 
arraylistanimalquizcollection;
布尔查找=假;
animalQuizCollection=newarraylist();
对于(int i=0;i
Map animalQuizCollection;
animalQuizCollection=newhashmap();//仅适用于java 7的菱形运算符。
int随机指数;
随机=新随机();
而(animalQuizCollection.size()<5){
randomIndex=random.nextInt(animalAnswer.length);
animalQuizCollection.put(AnimalAnimalSwer[randomIndex],animalQuestion[randomIndex]);
}  
for(AnimalAnswer回答:animalQuizCollection.keySet()){
//这里有5个独特的答案和animalQuizCollection.get(答案)
//会给你相应的问题
}
这是一种快速而肮脏的方法,尤其是随机的方法可以提高效率。但是它基本上会随机选择答案和问题,并将它们添加到地图中,其中答案是关键,直到地图获得5个条目


我还没有测试过这个问题,所以可能会有bug,但这个概念似乎很可靠。

制作一个比较器来比较思考的问题

public class ToughQuizAnswerComparator implements Comparator<ToughQuiz> { 
    @Override 
    public int compare(ToughQuiz o1, ToughQuiz o2) { 
        return o1.getAnswer().compareTo(o2.getAnswer()); 
    } 
} 

创建一个新列表,在循环第一个列表的同时,如果元素不存在,则添加到第一个列表中,使用Collections类进行检查。

Toughquick
中实现
equals
方法,确保它为相同的答案返回相同的值,即使用答案计算它

@Override
public boolean equals(Object o) {
    if (o == null || !(o instanceof ToughQuiz))
        return false;

    ToughQuiz other= (ToughQuiz) o;
    if (this.answer.equals(other.answer))
        return true;

    return false;
}
然后,你会得到五个这样的测验:

Random random= new Random();
List<ToughQuiz> result= new ArrayList<>();
for (int i=0; i<5; i++) {
    //loop infinitely to find the unique answer 
    for (;;) {
        ToughQuiz quiz = animalQuizCollection.get(random.nextInt(animalQuizCollection.size());
        //because you overriden equals this will produce true if there is already an element inside with the same hashCode
        if (!result.contains(quiz)) {
            result.add(quiz);
            break; //break the inner loop
        }
    }
}
Random Random=new Random();
列表结果=新建ArrayList();
对于(int i=0;i请尝试以下方法:

Set<Answer> answersSet = new HashSet<Answer>();
List<ToughQuiz> differentAnswers = new ArrayList<ToughQuiz>();
for(ToughQuiz quiz : animalQuizCollection){
    if(answersSet.add(quiz.getAnswer())){
        differentAnswers.add(quiz);
    }
    if(differentAnswers.size() >= 5) break;
}
Set answersSet=new HashSet();
List differantanswers=new ArrayList();
用于(Toughquick测验:动物测验集合){
if(answersSet.add(quick.getAnswer())){
不同答案。添加(测验);
}
如果(differentianswers.size()>=5)中断;
}

答案
在您的情况下可能只是一个
字符串

地图将为您跟踪相应的问题,并具有唯一的键:

Map<Answer, ToughQuiz> map = new HashMap<>();  

for(ToughQuiz tq : animalQuizCollection)
    map.put(tq.getAnswer(), tq);  
Map Map=newhashmap();
用于(Toughquick tq:动物采集)
put(tq.getAnswer(),tq);

现在map包含所有唯一的答案及其对应的测验。

使用集合,检查当前元素的答案是否不在集合中。如果不在集合中,则将其添加到结果和集合中,并继续循环,直到结果中有5个元素。这就足够开始了。使用文档,实验。这就是你会学到的。用地图代替列表谢谢!这很管用Gr8!
Set<Answer> answersSet = new HashSet<Answer>();
List<ToughQuiz> differentAnswers = new ArrayList<ToughQuiz>();
for(ToughQuiz quiz : animalQuizCollection){
    if(answersSet.add(quiz.getAnswer())){
        differentAnswers.add(quiz);
    }
    if(differentAnswers.size() >= 5) break;
}
Map<Answer, ToughQuiz> map = new HashMap<>();  

for(ToughQuiz tq : animalQuizCollection)
    map.put(tq.getAnswer(), tq);