java - 展平深度嵌套的集合

标签 java recursion nested-lists

给定 <T> 类型的对象,包含一组Set<T>对象(参见下面的示例)。我正在尝试将嵌套的集合展平为单个集合。遇到了 TreeTraverser( Guava 库),但不确定它是否是理想的解决方案。

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
     }

 }
}

最佳答案

为什么不直接使用递归呢?

--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,但在我看来,这是一个有点晦涩难懂的 Guava 功能:

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

关于java - 展平深度嵌套的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518407/

相关文章:

R - 处理数据框列表中的列表

JavaFx ListView CellLayout 缩放

Java - 如何知道打印机是否是网络打印机?

javascript - 使用springmvc框架jQuery Ajax文件上传返回415

Java - 使用递归一次打印一个字符

search - 如何在 Vim 的目录中递归搜索和替换?

java - SQLException 结果集结束后

c - 无法在递归函数中返回正确的变量值

python - 以点表示法返回 python 嵌套 dict/json 文档中所有变量名称的列表

python-3.x - 根据比较从另一个嵌套列表获得的值从嵌套列表中删除项目