我发现自己有时会这样做:
List<String> keys = new ArrayList<String>(vii.slots.keySet());
Collections.sort(keys);
for(String index : keys) {
...
是否有一种方法(在公共场所,番石榴,无论哪里)在一行中执行此操作,例如:
for(String index : sorted(vii.slots.keySet())) {
...
很抱歉,如果这是一个常见问题解答,但是经过一些网络搜索我没能找到这个,我确信Java大师会在五秒钟后回答这个问题。
由于
答案 0 :(得分:2)
Map<String,VarInfo> sorted = new TreeMap<String,VarInfo>(vii.slots);
for (Map.Entry<String,VarInfo> entry : sorted) {
doStuff(entry.getKey(), entry.getValue());
}
答案 1 :(得分:1)
可能您需要某种SortedSet
而不是List
。如果你需要保持每个元素的出现次数 - 尝试使用番石榴TreeMultiset
一个例子:
Multiset<Integer> multiSet = TreeMultiset.create();
multiSet.add(2);
multiSet.add(2);
multiSet.add(1);
multiSet.add(5);
multiSet.add(6);
multiSet.add(6);
multiSet.add(3);
for (Integer i : multiSet) {
System.out.print(i);
}
输出将是:
1223566
答案 2 :(得分:1)
一个选项是编写一个Iterable类,它将获取你的map并迭代键;然后你得到你的单行调用,不需要其它的图书馆依赖。
答案 3 :(得分:1)
Guava的ordering可能正是您所寻找的:
供您使用:
for (String index : Ordering.<String>natural().sortedCopy(vii.slots.keySet())) {
System.out.println(index);
}
使用自然顺序的简单排序看起来像:
List<String> list = new ArrayList<>();
list.add("pops");
list.add("chops");
list.add("zebra");
list.add("xam");
for (String str : Ordering.<String>natural().sortedCopy(list)) {
System.out.println(str);
}
给出:
chops
pops
xam
zebra
Ordering
也可以使用自定义Comparator
个实例按所需顺序排序。