![](/img/trans.png)
[英]Save keys of HashMap into ArrayList sorted by the HashMaps values in Java
[英]Java: display values based on sorted keys in hashmap
我有一個HashMap,我對類別進行了排序,並將其放在列表中,即最初的類別為:-A,B,C,D,排序后為D,C,B,A,我將其添加到了清單。
我想根據類別的排序順序顯示問題,即顯示類別為-D的所有問題,然后顯示類別為-C的所有問題,依此類推。
這是我嘗試過的:
List<Category> list = Arrays.asList(Category.values());
List<Question> list1 = new ArrayList<>();
list1.addAll(questionList);
Collections.sort(list, new Comparator<Category>() {
@Override
public int compare(Category o1, Category o2) {
return o2.ordinal() - o1.ordinal();
}
});
System.out.println("Categories" +list);
Map< List<Category>,List<Question>> map = new HashMap<>();
map.put(list, list1);}}
boolean ty = list1.containsAll(list1);
if(ty==true){
out.println(list1.get(0).getQuestion()) ;}
我希望我的輸出像這樣:
D:你叫什么名字? 你好嗎?
C:另一個問題1? 另一個問題2?
B:另一個問題3? 另一個問題4?
我想根據類別的排序順序顯示問題,即顯示類別為-D的所有問題,然后顯示類別為-C的所有問題,依此類推。
要滿足您的需求,問題必須與類別相關。
您有兩種方法:
比較器更加簡潔,這是一個好主意,但是在您的情況下,它有一個缺點,即在渲染時,它不會保持與每個問題相關的類別:
我希望我的輸出像這樣:
D:你叫什么名字? 你好嗎?
C:另一個問題1? 另一個問題2?
B:另一個問題3? 另一個問題4?
您可以使用存儲在問題中的類別信息來檢索信息,但是由於類別不是外部信息,而是必須在另一個對象中搜索的計算信息,因此它迫使您在迭代過程中進行相當笨拙的處理。
通過創建按類別關聯問題的地圖,您只需要進行迭代即可呈現信息,並且可以以更一般的方式對類別的每次迭代執行任何其他處理。
這里的代碼:
public static void main(String[] args) {
// create your questions
List<Question> questionsInput = new ArrayList<>();
questionsInput.add(new Question("question 1 For A?", Category.A));
questionsInput.add(new Question("question 2 For A?", Category.A));
questionsInput.add(new Question("question 1 For A?", Category.B));
questionsInput.add(new Question("question 2 For A?", Category.B));
Map<Category, List<Question>> map = associateQuestionByCat(questionsInput);
// display info
for (Entry<Category, List<Question>> entry : map.entrySet()) {
System.out.print("cat " + entry.getKey() + ":");
for (Question q : entry.getValue()) {
System.out.print(q.getQuestion());
}
System.out.println("");
}
}
public static Map<Category, List<Question>> associateQuestionByCat(List<Question> questions ) {
Map<Category, List<Question>> questionsByCategory = new TreeMap<>(Collections.reverseOrder());
for (Question q : questions) {
final Category currentCat = q.getCat();
List<Question> questionsForCurrentCat = questionsByCategory.get(currentCat);
if (questionsForCurrentCat == null) {
questionsForCurrentCat = new ArrayList<>();
questionsByCategory.put(currentCat, questionsForCurrentCat);
}
questionsForCurrentCat.add(q);
}
return questionsByCategory;
}
}
我認為這會給您預期的輸出。
Collections.sort(list, new Comparator<Category>() {
@Override
public int compare(Category o1, Category o2) {
// o1.getCategoryName() is A or B or C or D
return o1.getCategoryName().compareTo(o2.getCategoryName());
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.