使用java </sentence,>以降序输出Map.Entry <sentence,integer =“”>

时间:2015-01-25 13:28:07

标签: java sorting printing hashmap output

显然这是一次非常幼稚的尝试,但我对编程缺乏经验。我想要做的是按降序打印这些值,即最大的打印首先打印,然后打印最小打印,我怎么能实现这个?

for (Map.Entry<Sentence, Integer> entry : ontology.ruleCount.entrySet()) 
    {
        if(entry.getValue() >= 10)
        System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 9)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 8)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 7)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 6)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 5)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 4)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 3)
            System.out.println(entry.getKey()+" : "+entry.getValue());

        if(entry.getValue() >= 2)
            System.out.println(entry.getKey()+" : "+entry.getValue());
    } 

3 个答案:

答案 0 :(得分:8)

您需要对地图条目的集合进行排序。在Java 8中,这需要非常简单的代码:

ontology.ruleCount.entrySet().stream()
        .sorted(reverseOrder(Map.Entry.comparingByValue()))
        .forEach(e -> System.out.println(e.getKey() + " : " + e.getValue()));

(暗示import static java.util.Collections.reverseOrder;

答案 1 :(得分:0)

基本程序(Java 8之前版)是:

  1. ontology.ruleCount.entrySet()的元素写入List,例如ArrayList
  2. 实施一个合适的Comparator,查看条目&#39;值
  3. 使用Collections.sort使用List
  4. Comparator进行排序
  5. 使用您喜欢的排序列表!

答案 2 :(得分:0)

Entry.comparingByValue().reversed在按值降序对地图排序时不起作用。这是一个简单的解决方案

  UnSortedMap.entrySet().stream()
                    .filter(e -> e.getValue() > 1)
                    .sorted(Entry.comparingByValue(Comparator.reverseOrder()))
                    .collect(Collectors.toMap(Entry::getKey, Entry::getValue,
                            (e1, e2) -> e1, LinkedHashMap::new));