java - 按映射值对字符串列表进行排序

标签 java sorting comparable

我创建了一个 map ,我想按值对其进行排序,但我需要仅将输出作为字符串列表给出。我认为我可以通过扩展可比较来对 map 进行排序,然后将每个排序的键添加到列表中,但我不确定这是最好的方法。有什么想法吗?

//code is not finished yet//
public List<String> search(String prefix) {
    Map <String, Integer> suitable_sites = new LinkedHashMap<>() ;
    List<String> sorted_list = new ArrayList<>();
    for (Map.Entry<String, Site<String>> site :index.entrySet()) {
        Map <String, Integer> words = site.getValue().getWords() ;
        int counter =0 ;
        for (String word : words.keySet()) {
            if (word.startsWith(prefix))
                counter++;
        }
        int weight = counter / site.getValue().getAmmount();
        if (weight == 0 )
            continue;
        suitable_sites.put(site.getKey(), weight);
    }
    return  null;
}

最佳答案

    final HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("abcd",5);
    map.put("xyz",152);
    map.put("pqr",1);
    List list = new ArrayList<String>(map.keySet());

    System.out.println("before : "+ list);
    Collections.sort(list, new Comparator<String>(){
        public int compare(String item1, String item2){
            int compare = map.get(item1) - map.get(item2);
            if(compare == 0)
            {  
                return (item1.compareTo(item2)); 
            }
            return compare;
        }
    });

    System.out.println("after : "+ list);

此代码使用内联比较器。如果值与我们考虑的词法顺序相同。这将在下面打印

before : [pqr, abcd, xyz]

after : [pqr, abcd, xyz]

关于java - 按映射值对字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341775/

相关文章:

java - 对元素仍位于第一位的列表进行排序

java - 四元数比较?

java - 将所有 JSON 值转换为字符串

java - JVM 是否通过在同一方法中存储相似方法调用的结果来修复我的低效代码?

java.lang.NoClassDefFoundError : android. 媒体.ThumbnailUtils

python - 在不知道键/值的情况下对字典列表进行排序

java - 将每个项目与 ArrayList 中的每个其他项目进行比较

java - 如何对集合中的两个不同对象进行排序?

java - 在Java中,如何使用我自己的比较标准对未实现Comparable的对象进行排序?

java - Eclipse 中代码清理的快捷键