【问题标题】:output Map.Entry<Sentence, Integer> in descending order with java用java降序输出Map.Entry<Sentence, Integer>
【发布时间】:2015-01-25 13:28:06
【问题描述】:

显然这是一个非常幼稚的尝试,但我在编程方面相当缺乏经验。我想做的是按降序打印这些值,即最大的会先打印,然后最小的打印最后,我怎样才能做到这一点?

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());
    } 

【问题讨论】:

  • 对地图进行排序怎么样?使用树形图根据地图值的排序顺序对存储这些值进行排序。比较器实现 sld 帮助。
  • 哈哈 zerocool。黑客。太棒了!
  • @zerocool 根据除键之外的任何其他条件对映射条目进行排序是一个非常糟糕的主意。这将违反 TreeMap 所基于的基本假设。

标签: java sorting printing hashmap output


【解决方案1】:

您需要对地图条目的集合进行排序。在 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;

【讨论】:

  • @BoristheSpider 那里,这个版本有效。奇怪,使用comparingByValue().reversed() 失败,但仅内联reversed 的代码,即Collection.reverseOrder(this),就可以了。
  • 我必须将它添加到我的技巧列表中。这是正确的答案,+1。
  • 太棒了!是否有某种好方法可以仅在值大于 1 时才将它们打印出来?
  • 这很简单,在sorted:.filter(e -&gt; e.getValue() &gt; 1)之前插入一个过滤阶段。
  • @BoristheSpider 我已经 made a question 立即解决了这个推理问题 :)
【解决方案2】:

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));

【讨论】:

    【解决方案3】:

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

    1. ontology.ruleCount.entrySet() 的元素写入List,例如ArrayList
    2. 实现一个合适的Comparator 来查看条目的值
    3. 使用Collections.sort 使用ComparatorList 进行排序。
    4. 随意使用排序列表!

    【讨论】:

    • 如何让 Collections.sort 降序排列?
    • 实现您的比较器以提供所需的顺序,例如return -Integer.compare(first value, second value);return Integer.compare(second value, first value);
    • 如何确保每行只打印一个条目?
    • 每个条目拨打一次System.println
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2011-11-16
    • 2018-08-23
    相关资源
    最近更新 更多