给定类型为<T>
的对象,其中包含一组Set<T>
个对象(请参阅下面的示例)。我试图将嵌套集合展平为单个集合。遇到TreeTraverser(番石榴图书馆)但不确定它是否是理想的解决方案。
Example
public class Tweet{
int id;
String message;
DateTime date;
Set<Tweet> replies;
}
Traverse the nested replies Set and place it in a collection;
for(Tweet a : tweets.replies){
...
for(Tweet b : a.replies){
...
for(Tweet c: b.replies){
//soo on
}
}
}
答案 0 :(得分:1)
为什么不直接使用递归?
- DFS集合
public void collect(Set<Tweet> tweets, List<Tweet> collector)
{
for (Tweet tweet: tweets)
{
collector.add(tweet);
if (tweet.replies != null)
collect(tweet.replies, collector);
}
}
编辑完整性。 你也可以使用TreeTraverser,但它是一个有点模糊的番石榴功能imo:
TreeTraverser<Tweet> traverser = new TreeTraverser<Tweet>() {
@Override
public Iterable<Tweet> children(Tweet root) {
return root.replies; }
};
List<Tweet> allTweets = new ArrayList<Tweet> (traverser.breadthFirstTraversal(root))