2017-04-19 4 views
1

Erste habe ich unten Tabelleverschiedene Objekt aus der Liste in 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 

Jetzt habe ich die Liste für jede einzelne question_id

i unten Code verwendet haben, erstellen möchten

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}] 

Aber dieses Gebens Ich wiederhole das Objekt der gleichen Daten, wenn ich sowohl spanischen als auch englischen Fragetext wie oben gezeigt habe. Wie bekomme ich eine eindeutige Liste?

Wie bekomme ich sowohl spanischen Text als auch englischen Text für jede question_id zusammen mit language_id und um darauf zuzugreifen?

Bitte helfen Sie mir auf dieser

+1

Ihre 'questionListMap' Liste haben enthält das gleiche Objekt mehrmals. Auch wenn Sie bei jeder Iteration neue Maps erstellen, erhalten Sie nicht die erwarteten Ergebnisse. Sie müssen die Liste bei jeder Iteration durchsehen, um zu sehen, ob bereits eine Karte für die aktuelle Frage vorhanden ist, und den englischen oder spanischen Text festlegen. – Titus

+1

Um zum vorherigen Kommentar hinzuzufügen, können Sie keine anderen Werte für das Attribut 'Sprache' in Ihrer Map hinzufügen, da diese überschrieben werden. Möglicherweise müssen Sie sich eine andere Möglichkeit zum Speichern dieses Attributs ausdenken, wenn Sie die Sprach-IDs für beide Sprachen mit ihren Texten wünschen. – user2004685

+0

@ user2004685 Andere Arbeit ist auch gut, bitte sagen Sie mir, wie Sie meine Anforderung erreichen – allDroid

Antwort

0

Der erste Schritt eine POJO Klasse wie diese zu erstellen wäre,

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(); 
    } 
} 

Nächster Schritt wäre, um Ihren Code-Schnipsel wie folgt zu ändern:

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); 

Schließlich ist hier die Implementierung der getQuestionDetails Funktion:

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; 
} 
+0

Dies gibt mir das gleiche Objekt wiederholt 5 mal – allDroid

+0

@allDroid Die Lösung aktualisiert. Es sollte jetzt gut funktionieren. – user2004685

+0

es funktionierte dank – allDroid

0

Ich würde empfehlen, die folgenden Aktionen ausführen:

QuestionText zu unterscheiden, müssen Sie equals Methode question_text_id außer Kraft zu setzen. Ansonsten wären zwei Fragen mit dem gleichen question_id, aber unterschiedliche Sprachtexte wären gleich.

Erstellen Sie dann zwei separate Karten für jede Sprache. Dann iteriere einfach alle Fragen und lege jede Frage in eine entsprechende Karte unter question_id. Sie können eine Frage Objekt durch seine question_id und erhalten Sie alle notwendigen Felder aus ihm, darunter Spanisch/Englisch Text

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); 
}    

So retrive, Ihre Karten Art von Map<Long, QuestionText>

Verwandte Themen