0

次の課題を解決するための賢明な、または少なくとも実用的なアイデアはありません。

私は 198 件の課題を抱えており、各課題を 10 人で解決し、Java 休止状態と永続化 API を使用してすべてを PostgreSQL データベースに書き込みました。これまでのところうまくいきました。

1 つの課題に対して 10 の異なる/明確な回答がある場合もありますが、他の課題では、2 つまたは 3 つの異なる/明確な回答しかありません (たとえば、「5 + 5 は何か」という課題では、8 人が「10」と答え、2 人が「10」と答えました)。 "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 に答える