如何在使用 toString 方法将 HashMap 转换为 String 时覆盖 = 符号?
How to override = symbol while converting HashMap to String using toString method?
下面是部分代码,其中地图初始化为:
Map<Integer,Integer> map = new HashMap<>();
我要修改输出的行是
System.out.println("Price and items "+map.toString());
当前输出在哪里
{100=10,200=5}
我要展示
{100:10,200:5}
由于地图是整数整数,您可以使用 toString()
方法并替换不需要的字符...
进行字符串替换:)
map.toString().replace("=",":");
您不能直接覆盖 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(", ");
}
}
您只需将 =
更改为 :
。
不要依赖方法 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(", ", "{", "}"));
}
下面是部分代码,其中地图初始化为:
Map<Integer,Integer> map = new HashMap<>();
我要修改输出的行是
System.out.println("Price and items "+map.toString());
当前输出在哪里
{100=10,200=5}
我要展示
{100:10,200:5}
由于地图是整数整数,您可以使用 toString()
方法并替换不需要的字符...
进行字符串替换:)
map.toString().replace("=",":");
您不能直接覆盖 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(", ");
}
}
您只需将 =
更改为 :
。
不要依赖方法 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(", ", "{", "}"));
}