【问题标题】:Why it returns null, but not String in HashMap? java为什么它返回null,而不是HashMap中的String?爪哇
【发布时间】:2021-12-07 00:08:11
【问题描述】:

如何从 Map 中获取值?我研究 Collections 并想离开那个顺序 。 我在 之前尝试过,在循环中我放了 res.append(map.get(num)); - 这对我有帮助。但不知道如何以相反的顺序进行操作。 我也红了https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#get-java.lang.Object-,但我确切地知道我有钥匙..

import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        int x = 555;
        String result = romanianConverter(x);
        System.out.println(result);
    }

    public static String romanianConverter(int value) {
        Map<String, Integer> map = new LinkedHashMap<>();
//        map.put(1000, "M");
//        map.put(900,"CM");
//        map.put(500,"D");
//        map.put(400,"CD");
//        map.put(100,"C" );
//        map.put(90,"XC" );
//        map.put(50,"L" );
//        map.put(40,"XL");
//        map.put(10,"X" );
//        map.put(9,"IX" );
//        map.put(5,"V" );
//        map.put(4,"IV" );
//        map.put(1,"I" );
        map.put("M", 1000);
        map.put("CM", 900);
        map.put("D", 500);
        map.put("CD", 400);
        map.put("C", 100);
        map.put("XC", 90);
        map.put("L", 50);
        map.put("XL", 40);
        map.put("X", 10);
        map.put("IX", 9);
        map.put("V", 5);
        map.put("IV", 4);
        map.put("I", 1);

        StringBuilder stringBuilder = new StringBuilder("Result = ");

        for (int number2 : map.values()) {
            while (number2 <= value) {
                stringBuilder.append(map.keySet().add(number2));
                value -= number2;
            }
        }
        return stringBuilder.toString();
    }
}

【问题讨论】:

标签: java hashmap stringbuilder linkedhashmap


【解决方案1】:

遍历HashMap 非常简单。首先你要明白&lt;&gt;菱形括号中的第一个类是KEY,第二个是VALUE

所以如果我创建一个新的HashMap&lt;Integer, String&gt; 元素将采用以下形式

1 -> "str",
2 -> "str2"
....

要遍历这个 HashMap 而我们只想要 keys 这是这样做的方法:

Map<String, Object> map = ...;

for (Integer key : map.keySet()) {
    // ...
}

如果我们只想要值:

for (String value : map.values()) {
    // ...
}

如果我们都想要它们:

for (Map.Entry<Integer, String> entry : map.entrySet()) {
    Integer key = entry.getKey();
    String value = entry.getValue();
    // ...
}

我仍然确定您正在尝试用罗马数字转换integers。 这已经有一个solution here

【讨论】:

    【解决方案2】:

    在当前实现中,您需要迭代Map::entrySet 方法返回的映射条目,以便在找到值后立即使用该键:

    // ...
        for (Map.Entry<String, Integer> me: map.entrySet()) {
            int number2 = me.getValue();
            while (number2 <= value) {
                stringBuilder.append(me.getKey());
                value -= number2;
            }
        }
    // ...
    

    或者,如果实现了反向映​​射Map&lt;Integer, String&gt; map,则应该迭代keySet

            for (Integer number2: map.keySet()) {
                while (number2 <= value) {
                    stringBuilder.append(map.get(number2));
                    value -= number2;
                }
            }
    
    

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2010-12-23
    • 2011-05-22
    • 2012-01-21
    • 2012-03-18
    • 2019-03-04
    相关资源
    最近更新 更多