Java 展平深度嵌套的集合
给定一个Java 展平深度嵌套的集合,java,recursion,nested-lists,Java,Recursion,Nested Lists,给定一个类型的对象,包含一组集合对象(参见下面的示例)。我试图将嵌套集展平为单个集合。遇到了TreeTraverser(番石榴图书馆),但不确定它是否是这里的理想解决方案 Example public class Tweet{ int id; String message; DateTime date; Set<Tweet> replies; } Traverse the nested replies Set and place it in a collectio
类型的对象,包含一组集合
对象(参见下面的示例)。我试图将嵌套集展平为单个集合。遇到了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
}
}
}
示例
公共类推文{
int-id;
字符串消息;
日期时间日期;
设置回复;
}
遍历嵌套回复集并将其放置在集合中;
for(Tweet a:tweets.repress){
...
对于(Tweet b:a.回复){
...
对于(推特c:b.回复){
//秀安
}
}
}
为什么不直接使用递归呢
--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);
}
}
public void collect(设置tweets、列表收集器)
{
用于(Tweet-Tweet:tweets)
{
collector.add(tweet);
if(tweet.replays!=null)
收集(tweet.repress,收集器);
}
}
为完整性而编辑。
您也可以使用TreeTraverser,但在我看来,这是一个有点模糊的番石榴特性:
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))
TreeTraverser遍历器=新的TreeTraverser(){
@凌驾
公共Iterable子项(推文根){
返回root.replays;}
};
List allTweets=newarraylist(traverser.breadthFirstTraversal(root))
递归是否有定义的深度?它们是否可以相互指向?如果没有,那么TreeTraverser
在这里应该很有用。没有。只需将根节点的回复传递给它。让“tweet”成为您的根tweet列表收集器=new ArrayList();collector.add(tweet);如果(tweet.replays!=null)收集(tweet.replays,收集器);上面的代码将收集所有级别