如何通过一个Collection <集>

问题描述:

迭代我有这样的事情:如何通过一个Collection <集<IConnection>>

something need here = scope.getConnections(); 

//getConnections() returns Collection<Set<IConnection>> 

我需要通过所有连接迭代(东西了getConnections()回报)

如何做到这一点?

+0

你有IDE吗?它们中的大多数有助于编写返回类型值,并且还可以插入collection-loop-code。 – 2009-11-14 15:21:06

+0

:)是的,我有日食,我只是非常新的Java和日食 – Omu 2009-11-14 15:24:03

+0

你是否重新创建连接池?我建议使用完全开发,测试和维护连接池框架的第三方,如C3P0或Proxool。 – BalusC 2009-11-14 15:39:56

for (Set<IConnection> set : scope.getConnections()) { 
    for (IConnection iConnection : set) { 
     // use each iConnection 
    } 
} 
+1

你的'泛型'在哪里? – 2009-11-14 15:23:32

Collection<Set<IConnection>> sets = scope.getConnections(); 

for (Set<IConnection> set : sets) { 
    for (IConnection connection : set) { 
    //do something 
    } 
} 
+1

哪里是你的'泛型'? – 2009-11-14 15:27:57

+1

泛型在那里,但Bozho没有正确使用代码风格。我为他解决了这个问题。 – 2009-11-14 15:30:37

+0

啊,是的,对不起。我很着急,没有检查:) – Bozho 2009-11-14 20:08:08

我建议你不要在你的方式返回连接。
你getConnections必须返回只

Collection<IConnection> 

public Collection<IConnection> getConnections() 
{ 
    return connections; 
} 

类里面你可以选择你想要的方式或需要来存储它们

private Set<IConnection> connections; 

考虑双回路作为您一流的设计有问题。
如果我作为班级的用户必须每次都写双循环,我将停止使用你的班级。所以会做你的同事。

for (IConnection connection : provider.getConnections()) 
{ 
    connection.doAction(); 
} 
+0

scope.getConnections()来自引用的库,所以我不能那样做,我只是使用它 – Omu 2009-11-14 15:53:46

+0

好的。我知道了。如果你只需要所有的连接,我会建议在连接上写一个包装类或者Util方法两个循环。 – 2009-11-14 15:59:15

两嵌套for循环的答案很可能是你所需要的,但要注意,你也可以通过“关系”集合Iterables.concat()在谷歌的集合,并获得了一个“扁平化”迭代。

http://google-collections.googlecode.com