如何按值对List进行排序?

时间:2017-08-12 19:54:45

标签: java

如何按值按列表对Map进行排序?我在列表中总是有一个元素,但我必须使用list。 我有:

 Map<String,List<String>> map = new HashMap<>();

import java.util.*;

public class MapUtil
{
    public static <K, V extends Comparable<? super V>> Map<K, V>
        sortByValue( Map<K, V> map )
    {
        List<Map.Entry<K, V>> list =
            new LinkedList<Map.Entry<K, V>>( map.entrySet() );
        Collections.sort( list, new Comparator<Map.Entry<K, V>>()
        {
            public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 )
            {
                return (o1.getValue()).compareTo( o2.getValue() );
            }
        } );

        Map<K, V> result = new LinkedHashMap<K, V>();
        for (Map.Entry<K, V> entry : list)
        {
            result.put( entry.getKey(), entry.getValue() );
        }
        return result;
    }
}

当我尝试这个时:

MapUtil.sortByValue(map);

我收到此错误:

The method sortByValue(Map<K,V>) in the type MapUtil is not applicable for the arguments (Map<String,List<String>>)

1 个答案:

答案 0 :(得分:2)

V需要实现可比较的,但List<String>没有。您需要更改排序方法以使用显式comparator