我有以下代码来排序列表,但我需要使它降序排序,
List list = new LinkedList(thismap.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o2)).getValue())
.compareTo(((Map.Entry) (o1)).getValue());
}
});
Map output = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
output.put(entry.getKey(), entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)
一种常见的通用技术是通过简单地交换参数将Comparator包装在反向比较器中.
class ReverseComparator<T> implements Comparator<T> {
private final Comparator target;
public ReverseComparator(Comparator<T> target) {
super();
this.target = target;
}
public int compare(T first, T second) {
return target.compare(second, first);
}
}
Run Code Online (Sandbox Code Playgroud)
要将它与我们的示例一起使用:
Comparator original = new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o2)).getValue())
.compareTo(((Map.Entry) (o1)).getValue());
}
};
Collections.sort(list, new ReverseComparator(original));
Run Code Online (Sandbox Code Playgroud)
简单的一般答案是使用java.util.Collections.reverseOrder(Comparator).
Comparator myComparator = new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o2)).getValue())
.compareTo(((Map.Entry) (o1)).getValue());
}
}
// ... or whatever.
Comparator myReverseComparator = Collections.reverseOrder(myComparator);
Run Code Online (Sandbox Code Playgroud)
或者,一个特定的解决方案是翻转比较方法中的参数:
Comparator myReverseComparator = new Comparator() {
public int compare(Object o2, Object o1) { // <== NOTE - params reversed!!
return ((Comparable) ((Map.Entry) (o2)).getValue())
.compareTo(((Map.Entry) (o1)).getValue());
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于边缘情况,乘以-1是一个不正确的解决方案Integer.MIN_VALUE. Integer.MIN_VALUE * -1是......Integer.MIN_VALUE
| 归档时间: |
|
| 查看次数: |
10489 次 |
| 最近记录: |