我有一个hashmap,它将对象Node作为键和一组节点作为值。节点只是一个具有整数值的对象。这些值正是它们在图中所连接的值。 addEdge方法只是将两个节点连接在一起,因此它将node2添加到Node1的设置值,反之亦然。
private map<Node, Set <Node>> nodeToNeighbours;
public Graph() {
nodeToNeighbours = new TreeMap<Node, Set<Node>>();
}
public static void main (String[] args) {
Graph test = new graph();
Node first = new Node(5);
Node second = new Node(6);
Node third = new Node(7);
test.addEdge(first, second);
test.addEdge(first, third);
test.toString();
}
public String toString() {
for (Map.Entry<Node, Set <Node>> e: nodeToneighbours.entrySet()){
System.out.println(e.getKey() + " is adjacent to " + e.getValue());
return null;
}
我想要的输出是什么:
Node 5 is adjacent to Node 6, Node 7
Node 6 is adjacent to Node 5
Node 7 is adjacent to Node 5
我目前得到的输出:
Node 5 is adjacent to [Node 6, Node 7]
Node 6 is adjacent to [Node 5]
Node 7 is adjacent to [Node 5]
我也不允许继续用空字符串或其他任何东西替换括号。
答案 0 :(得分:2)
嗯,您只需要一种将Set<Node>
转换为String
的不同方法。目前您正在使用默认的toString()
实现,但您可以轻松编写自己的实现,例如。
private static String commaSeparate(Iterable<?> items) {
StringBuilder builder = new StringBuilder();
for (Object item : items) {
if (builder.length() != 0) {
builder.append(", ");
}
builder.append(item);
}
return builder.toString();
}
或者使用Guava中的Joiner
类或Java 8中的StringJoiner
,这两个类都是针对此类内容而设计的。
无论哪种方式,您都可以在输出中使用格式化字符串:
System.out.println(e.getKey() + " is adjacent to " + commaSeparate(e.getValue()));