我没有聪明或至少有工作的想法如何解决以下挑战:
我有198个作业,让每个作业由10个人解决,然后我使用Java hibernate& amp;写了一切在PostgreSQL数据库中。持久性API。到目前为止工作正常。
有时我对作业有10个不同/不同的答案 - 对于其他作业我只有2或3个不同/不同的答案(例如,对于作业“什么是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 |
| ... | ... | ... |
| ... | ... | ... |
| ... | ... | ... |
+---------+---------+---------+
现在的挑战部分:
我现在想要从每个作业(Q1,Q2,Q3,......)中随机挑出4个不同的答案(如果可能的话)并创建一个新的作业,人们必须在最佳答案上投票。
但是如图所示,有时候我的答案会有不到4个不同的答案。在这种情况下,我想把所有可用的东西都拿走。
我怎样才能遍历我的列表并执行这种“挑选”?
P.S。随机选择答案并不是很重要 - 也可以选择前4个答案。
感谢您的帮助
问候
答案 0 :(得分:0)
如果结果集很小我就会
// 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);
}
}