Java 用x块迭代列表,并从每个块中选择y个元素

Java 用x块迭代列表,并从每个块中选择y个元素,java,hibernate,list,persistence,loops,Java,Hibernate,List,Persistence,Loops,我没有一个聪明的或至少是可行的想法来解决以下挑战: 我有198个作业,每个作业由10个人完成,然后我使用JavaHibernate和PersistenceAPI在PostgreSQL数据库中编写了所有内容。到目前为止效果不错 有时,对于一项作业,我有10个不同/不同的答案-对于其他作业,我只有2或3个不同/不同的答案(例如,对于作业“what is 5+5”,8人回答“10”,2人回答“25”) 现在,我运行一个SQL语句来获取一个包含我的作业和不同答案的列表: SELECT DISTINCT

我没有一个聪明的或至少是可行的想法来解决以下挑战:

我有198个作业,每个作业由10个人完成,然后我使用JavaHibernate和PersistenceAPI在PostgreSQL数据库中编写了所有内容。到目前为止效果不错

有时,对于一项作业,我有10个不同/不同的答案-对于其他作业,我只有2或3个不同/不同的答案(例如,对于作业“what is 5+5”,8人回答“10”,2人回答“25”)

现在,我运行一个SQL语句来获取一个包含我的作业和不同答案的列表:

 SELECT DISTINCT question, answer FROM survey INNER JOIN results ON results.survey_id=results.id;
我现在得到的结果列表大致如下所示:

+---------+----------+--------+
| ID      | Question | Answer | 
+---------+----------+--------+
| 1       | Q1      | 20      |
| 2       | Q1      | 22      | 
| 3       | Q1      | 25      | 
| 4       | Q1      | 21      | 
| 5       | Q1      | 22      | 
| 6       | Q1      | 10      | 
| 7       | Q1      | 20.5    |
| 8       | Q1      | 22.3    |
| 9       | Q1      | 28      |
| 10      | Q1      | 26      |
| 11      | Q2      | 52      |
| 12      | Q2      | 51      |
| 13      | Q3      | 78      |
| 14      | Q3      | 80      |
| ...     | ...     | ...     |
| ...     | ...     | ...     |
| ...     | ...     | ...     |
+---------+---------+---------+
现在是挑战部分:

现在,我想从每个作业(第一季度、第二季度、第三季度……)中随机选出4个不同的答案(如果可能的话),并创建一个新作业,让人们投票选出最佳答案

但如图所示,有时我的作业答案少于4个。在这种情况下,我想带走所有可用的东西

我如何迭代我的列表并执行这种“挑选”

另外,随机选择答案不是很重要,也可以选择前4个答案

谢谢你的帮助


关于

如果结果集那么小,我会

// if random is needed [see here][1] to adapt the criteria
var answers = session.createCriteria(Answer.class)
    .setFetchMode("Question", FetchMode.eager)
    .list<Answer>();


// map of orginal question to voting question
Map<Question, Question> questions = new Hashmap<Question, Question>();
for (Answer answer : answers)
{
    if (questions.ContainsKey(answer.getQuestion()))
    {
        Question votingQuestion = questions.get(answer.getQuestion());
        if (votingQuestion.getPossibleAnswers().Count() < 4)
            votingQuestion.getPossibleAnswers().add(answer.Text);
    }
    else
    {
        Question votingQuestion = createVotingQuestion(answer.getQuestion());
        votingQuestion.getPossibleAnswers().add(answer.Text);
        questions.add(answer.getQuestion(), votingQuestion);
    }
}
//如果需要随机[参见此处][1]来调整标准
var answers=session.createCriteria(Answer.class)
.setFetchMode(“问题”,FetchMode.eager)
.list();
//原始问题到投票问题的映射
映射问题=新Hashmap();
for(答案:答案)
{
if(questions.ContainsKey(answer.getQuestion()))
{
问题votingQuestion=questions.get(answer.getQuestion());
if(votingQuestion.getPossibleAnswers().Count()<4)
votingQuestion.getPossibleAnswers().add(answer.Text);
}
其他的
{
Question votingQuestion=createVotingQuestion(answer.getQuestion());
votingQuestion.getPossibleAnswers().add(answer.Text);
添加(answer.getQuestion(),votingQuestion);
}
}