gpt4 book ai didi

java - 如何为集合实现 toString() ?

转载 作者:行者123 更新时间:2023-12-02 05:30:02 24 4
gpt4 key购买 nike

我经常需要打印列表或 map ,但我不喜欢它们默认的 toString() 方法的输出。例如 HashMap#toString() 输出如下所示:

{key-1=value-1, key-2=value-2, key-3=value-3}

但我希望输出是这样的:

key-1 = value-1, key-2 = value-2, key-3 = value-3

我创建了一个扩展 HashMap 的自定义类,并编写了自己的 toString() 方法,这导致了我真正的问题:

public final class CustomMap<K, V> extends HashMap<K, V> {

private static final long serialVersionUID = 1493227382148892732L;

@Override
public String toString() {
final StringBuilder builder = new StringBuilder();

final Iterator<Map.Entry<K, V>> entryIterator = entrySet().iterator();

if (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();

builder.append(entry.getKey());
builder.append(" = ");
builder.append(entry.getValue());
}

while (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();

builder.append(", ");
builder.append(entry.getKey());
builder.append(" = ");
builder.append(entry.getValue());
}

return builder.toString();
}

}

如您所见,我有重复的代码,因为 , 部分必须省略一次。那么我怎样才能将其重写为一种快速有效的方法而无需重复代码呢?

最佳答案

这可以通过 boolean 值轻松解决:

    final Iterator<Map.Entry<K, V>> entryIterator = entrySet().iterator();
boolean first = true;
while (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();
if (!first)
builder.append(", ");
else
first=false;
builder.append(entry.getKey());
builder.append(" = ");
builder.append(entry.getValue());
}

另一种选择是使用 Java 8 StringJoiner :

    StringJoiner sj = new StringJoiner(",");
while (entryIterator.hasNext()) {
final Map.Entry<K, V> entry = entryIterator.next();
sj.add(entry.getKey() + " = " + entry.getValue());
}
return sj.toString();

关于java - 如何为集合实现 toString() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25644464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com