如何迭代具有对象作为键的hashmap并将<objects>设置为值并打印两者?</objects>

时间:2014-10-15 16:13:52

标签: java graph tostring

我有一个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] 

我也不允许继续用空字符串或其他任何东西替换括号。

1 个答案:

答案 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()));