给定 <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/