我有一个HashMap,我已经对类别进行了排序并将其放入列表中,即最初的类别是: - A,B,C,D,排序后是D,C,B,A和i'我已将其添加到列表中。
我想根据类别的排序顺序显示问题,即 显示所有类别的问题: - 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?
答案 0 :(得分:1)
我想根据类别的排序顺序显示问题,即 显示所有类别的问题: - 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;
}
}
答案 1 :(得分:0)
我认为这会给你预期的输出。
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());
}
});