以下是将map初始化为的代码的一部分:
Map<Integer,Integer> map = new HashMap<>();
我要修改输出的行是
System.out.println("Price and items "+map.toString());
目前的产出
{100 = 10,200 = 5}
我想显示
的 {100:10200:5}
答案 0 :(得分: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(", ", "{", "}"));
}
如果您希望与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(", ", "{", "}"));
}
答案 1 :(得分:2)
由于map是整数整数,你可以使用toString()
方法来替换不需要的字符......
做字符串替换:)
map.toString().replace("=",":");
答案 2 :(得分:1)
您无法直接覆盖toString()
方法中的符号。
虽然您可以将String.replace
用于其中键和值不能包含=
的地图(例如Integer
s),但您必须提供不同的一般的实施。
如果你看一下AbstractMap.toString()
的来源,你可以看到这并不太棘手:
public String toString() {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (! i.hasNext())
return "{}";
StringBuilder sb = new StringBuilder();
sb.append('{');
for (;;) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
sb.append(key == this ? "(this Map)" : key);
sb.append('=');
sb.append(value == this ? "(this Map)" : value);
if (! i.hasNext())
return sb.append('}').toString();
sb.append(", ");
}
}
您只需将=
更改为:
。