在java中从列表中获取不同的对象

时间:2017-04-19 05:59:52

标签: java

我有下表

question_text_id question_id language_id  question_text
2                    7           1         english_text_1
3                    7           2         spanish_text_1
4                    8           2         spanish_text_2
5                    8           1         english_text_2   

我想为每个不同的question_id创建列表

我使用了以下代码

List<QuestionText> questionTextList = questionManager.getQuestionsTextByQuestionId(Long.parseLong(questions.getQuestionId().toString()));
for (QuestionText questionText : questionTextList) {
    questionMap.put("questionId", questionText.getQuestionId());
    questionMap.put("language", questionText.getLanguageId());
    if(questionText.getLanguageId().longValue() == 1){
        questionMap.put("englishQuestionText",questionText.getQuestionText());
    } else {
        questionMap.put("spanishQuestionText",questionText.getQuestionText());
    }
    questionListMap.add(questionMap);
}               
adminCollectionBookendModel.put("questionListMap",questionListMap);     

[{questionId = 1,language=1, englishQuestionText = english_text_1,spanishQuestionText=spanish_text_1},{questionId = 1,language=2, englishQuestionText = english_text_1,spanishQuestionText=spanish_text_1}]

但如果我同时拥有西班牙语和英语问题文本,这会让我重复相同数据的对象。如何获得独特的清单?

如何获取每个question_id的西班牙文本和英文文本以及language_id并访问它?

请帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

第一步是创建一个像这样的POJO类,

public class QuestionDetails {

    private int questionId;
    private int englishLanguageId;
    private int spanishLanguageId;
    private String englishLanguageText;
    private String spanishLanguageText;

    public int getQuestionId() {
        return questionId;
    }

    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public int getEnglishLanguageId() {
        return englishLanguageId;
    }

    public void setEnglishLanguageId(int englishLanguageId) {
        this.englishLanguageId = englishLanguageId;
    }

    public int getSpanishLanguageId() {
        return spanishLanguageId;
    }

    public void setSpanishLanguageId(int spanishLanguageId) {
        this.spanishLanguageId = spanishLanguageId;
    }

    public String getEnglishLanguageText() {
        return englishLanguageText;
    }

    public void setEnglishLanguageText(String englishLanguageText) {
        this.englishLanguageText = englishLanguageText;
    }

    public String getSpanishLanguageText() {
        return spanishLanguageText;
    }

    public void setSpanishLanguageText(String spanishLanguageText) {
        this.spanishLanguageText = spanishLanguageText;
    }

    @Override
    public String toString() {
        return new StringBuilder().append("questionId: ").append(questionId)
                .append(" ,englishLanguageId: ").append(englishLanguageId)
                .append(" ,englishLanguageText: ").append(englishLanguageText)
                .append(" ,spanishLanguageId: ").append(spanishLanguageId)
                .append(" ,spanishLanguageText: ").append(spanishLanguageText)
                .toString();
    }
}

下一步是更改您的代码段:

List<QuestionDetails> questionsList = new ArrayList<>();
List<QuestionText> questionTextList = questionManager
        .getQuestionsTextByQuestionId(Long.parseLong(questions
                .getQuestionId().toString()));
for (QuestionText questionText : questionTextList) {
    /* Get QuestionDetails Object */
    QuestionDetails qd = getQuestionDetails(
            questionText.getQuestionId(), questionsList);
    /* Check Null */
    if(null == qd) {
        /* Get New Object */
        qd = new QuestionDetails();
        /* Add Object To List */
        questionsList.add(qd);
    }
    /* Set Question ID */
    qd.setQuestionId(questionText.getQuestionId());
    /* Set Language ID & Text */
    if (questionText.getLanguageId().longValue() == 1) {
        qd.setEnglishLanguageId(questionText.getLanguageId()
                .longValue());
        qd.setEnglishLanguageText(questionText.getQuestionText());
    } else {
        qd.setSpanishLanguageId(questionText.getLanguageId()
                .longValue());
        qd.setSpanishLanguageText(questionText.getQuestionText());
    }
}
adminCollectionBookendModel.put("questionListMap", questionsList);

最后,这是getQuestionDetails函数的实现:

private QuestionDetails getQuestionDetails(int questionId,
        List<QuestionDetails> questionsList) {
    /* Search Existing Object */
    for (QuestionDetails qd : questionsList) {
        /* Match Found */
        if (qd.getQuestionId() == questionId) {
            return qd;
        }
    }

    /* No Object Found */
    return null;
}

答案 1 :(得分:0)

我建议您执行以下操作:

要区分QuestionText,您需要使用equals覆盖question_text_id方法。否则,两个问题具有相同的question_id,但不同的语言文本将是相同的。

然后为每种语言创建两个单独的地图。然后只需迭代所有问题,并通过question_id将每个问题放入相应的地图中。您可以通过其question_id检索问题对象并从中获取所有必填字段,包括西班牙语/英语文本

List<QuestionText> questionTextList = questionManager.getQuestionsTextByQuestionId(Long.parseLong(questions.getQuestionTextId().toString()));
for (QuestionText questionText : questionTextList) {

    if(questionText.getLanguageId().longValue() == 1){
        englishQuestionMap.put("question_id",questionText);
    } else {
        spanishQuestionMap.put("question_id",questionText);
    }
    questionListMap.add(questionMap);
}               

因此,您的地图的类型为Map<Long, QuestionText>