0

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

我有 198 个作业,让每个作业由 10 个人解决,然后我使用 Java hibernate & persistence API 在 PostgreSQL 数据库中编写所有内容。到目前为止效果很好。

有时我对一项作业确实有 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 个不同的答案。在这种情况下,我想拿走所有可用的东西。

我如何遍历我的列表并执行这种“挑选”?

PS随机选择答案并不是很重要-选择前4个答案也可以。

感谢你的帮助

问候

4

1 回答 1

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);
    }
}
于 2012-08-23T09:15:21.500 回答