【发布时间】:2012-09-25 11:47:13
【问题描述】:
我想使用包含每个项目的值的地图对列表进行排序。
Map<Integer, Float> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
map.put(0, 0.0f);
map.put(1, 5.0f);
map.put(2, 2.0f);
list = new ArrayList<>(map.keySet());
Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer left, Integer right) {
Float leftCost = map.get(left);
Float rightCost = map.get(right);
return leftCost.compareTo(rightCost);
}
})
我希望订单为0,2,1,因为1 的值高于2。但是java不让我这样做。我收到以下错误:Cannot refer to a non-final variable map inside an inner class defined in a different method
我怎样才能以这种方式做到这一点?
【问题讨论】:
-
为什么不将地图定义为最终地图?
-
因为我需要修改。或者即使我修改它也可以是最终的?
-
@OskarKjellin 为什么不回答而不是评论? :)
-
@omnosis
final指的是引用,而不是它指向的对象。 -
可以修改,但不能重新定义
标签: java list sorting collections final