展平深层嵌套的集合

时间:2014-10-22 22:46:50

标签: java recursion nested-lists

给定类型为<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
     }

 }
}

1 个答案:

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