如何使用toString方法将HashMap转换为String时覆盖=符号?

Cha*_*pau 0 java hashmap tostring println

下面是map的一部分,其中map被初始化为:
Map<Integer,Integer> map = new HashMap<>();
和我想要修改输出的行是

System.out.println("Price and items "+map.toString());
目前的输出是
{100 = 10,200 = 5}

我要显示
{100:10,200:5}

Nic*_*tto 7

不要依赖于该方法,toString()因为它是一个可以从一个Java版本更改为另一个版本的实现细节,您应该实现自己的方法.

假设您使用Java 8,它可能是:

public static <K, V> String mapToString(Map<K, V> map) {
    return map.entrySet()
        .stream()
        .map(entry -> entry.getKey() + ":" + entry.getValue())
        .collect(Collectors.joining(", ", "{", "}"));
}
Run Code Online (Sandbox Code Playgroud)

如果你想拥有完全相同的实施AbstractMap#toString()来检查,如果该键或值是当前地图,代码则是:

public static <K, V> String mapToString(Map<K, V> map) {
    return map.entrySet()
        .stream()
        .map(
            entry -> (entry.getKey() == map ? "(this Map)" : entry.getKey())
                    + ":"
                    + (entry.getValue() == map ? "(this Map)" : entry.getValue()))
        .collect(Collectors.joining(", ", "{", "}"));
}
Run Code Online (Sandbox Code Playgroud)