我有一个Map<String,Integer>
,按照
public void sortList(Map<String,Integer> map){
set = map.entrySet();
list = new ArrayList<Map.Entry<String, Integer>>(set);
Collections.sort( list, (o1, o2) -> (o2.getValue()).compareTo( o1.getValue() ));
}
我需要将所有值复制到新列表
word_used = new ArrayList<Integer>(map.values());
但它以非排序顺序保存
答案 0 :(得分:2)
当您对从list
创建的entrySet
进行排序时,它不会更改原始Map
中条目的顺序。如果您需要list
排序值,则必须从sortList
方法返回List
。
map.values()
不会返回已排序的值,因为这些值不会以Map
中的任何特定顺序保留。某些Map
实现(例如TreeMap
)会对键进行排序,但不会对值进行排序。
答案 1 :(得分:1)
首先提取列表,对其进行排序,然后用它创建一个新列表。
List<Integer> tmp = map.values();
Collections.sort(tmp);
word_used = new ArrayList<Integer>(tmp);
word_used = new ArrayList<Integer>(map.values()
.stream()
.sorted()
.collect(Collectors.toList()));