【问题标题】:How to refactor this Java code so it creates a String List of key:value pairs as opposed to printing them out?如何重构此 Java 代码,以便创建键值对的字符串列表,而不是将它们打印出来?
【发布时间】:2021-06-05 16:02:42
【问题描述】:

所以我在网上看到了一些代码,我在我的程序中实现了根据整数的值对 hashmap 进行排序,它工作成功但只输出值,我需要将值存储到一个字符串列表,但对代码的理解不够好,无法做到这一点,并且反复失败,有这么多括号让我感到困惑。

如果有人可以为我指出正确的方向,这将是有帮助的,我什至不知道该用谷歌搜索什么来找出如何做到这一点,谢谢。

public List<String> getMaxList(int n, HashMap<String, Integer> itemCount){
        List<Map.Entry<String, Integer>> maxList = new ArrayList<>();
        Object[] a = itemCount.entrySet().toArray();
        int n_iterator = n-1;

        Arrays.sort(a, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((Map.Entry<String, Integer>) o2).getValue()
                     .compareTo(((Map.Entry<String, Integer>) o1).getValue());
            }
        });

        for (Object e : a) {
            System.out.println(((Map.Entry<String, Integer>) e).getKey() + " : "
                    + ((Map.Entry<String, Integer>) e).getValue());
            if (n_iterator <= 0){
                break;
            } else {
                n_iterator--;
            }
        }
        return null;
    }
}

【问题讨论】:

    标签: java performance dictionary hashmap comparator


    【解决方案1】:

    如何重构此 Java 代码,以便创建 键值对的字符串列表,而不是将它们打印出来? 像这样试试。

    创建一些数据

    Map<String, Integer> map =
            Map.of("A", 10, "B", 3, "C", 8, "D", 2);
    

    现在流式传输地图的条目集。根据值排序并将条目转换为String:int 字符串并放入列表中。

    List<String> list = map.entrySet().stream()
            .sorted(Entry.comparingByValue()))
            .map(e -> e.getKey() + ":" + e.getValue())
            .collect(Collectors.toList());
    
    System.out.println(list);
    

    打印

    [D:2, B:3, C:8, A:10]
    

    要降序排序,把上面的sort方法改成

    .sorted(Entry.<String,Integer>comparingByValue().reversed())
    

    请注意,Entry 比较器必须与类型为 witnessed,因为编译器无法识别它们以正确应用 reversed() 方法。以上只是颠倒了Integers的自然排序顺序,即升序。

    最后,并非所有对象都提供返回比较器的方法,因此以下方法也可以。

    .sorted(Comparator.comparing(Entry::getValue,
                          Comparator.reverseOrder()))
    

    【讨论】:

    • 感谢您的帮助,有什么办法可以按降序排列列表以便于使用?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多