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