【发布时间】:2016-11-13 16:08:04
【问题描述】:
我有一个 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?
【问题讨论】:
-
看起来您需要
LinkedHashMap<Category, List<Question>>而不是HashMap< List<Category>, List<Question>>。这是因为与LinkedHashMap不同,HashMap没有排序,此外,您需要使用单个类别作为键而不是整个类别列表作为单个键,但是,如果您想以特定顺序访问问题,我不确定Map是否是对数据建模的好方法。 -
我不明白您为地图选择的键类型。为什么要将类别列表而不是单个类别作为您的关键?
-
您发布的代码与您描述的目标无关。诚然,您应该用代码发布您的问题,但这应该是一种解决问题的尝试。发布的代码执行以下操作: • 将预定义的
Category常量列表创建为list, • 创建questionList的副本,作为list1, • 将list完全按照它已有的顺序排序, • 创建一个奇怪类型的Map, • 将list1与其自身进行比较, • 如果true==true,则打印list1.get(0).getQuestion()。所以整个代码可以缩短为out.println(questionList.get(0).getQuestion());...
标签: java sorting arraylist collections hashmap