我有一个list
下面的层次结构,我想将其转换为平面list
。
我已经写了一种方法convertToFlatList
并使用了它。但是最终结果中缺少一些要素。我做错什么了?
还有比我以前将列表转换为平面列表更好的方法吗?
我添加了一个示例代码和类似于我在场景中必须使用的对象的内容。最终结果应为1、2、3、4、5、6、7
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
Member memberOne = new Member(1);
Member memberTwo = new Member(2);
Member memberThree = new Member(3);
Member memberFour = new Member(4);
Member memberFive = new Member(5);
Member memberSix = new Member(6);
Member memberSeven = new Member(7);
memberTwo.setChildren(Arrays.asList(memberThree, memberFour));
memberFour.setChildren(Arrays.asList(memberFive, memberSix));
List<Member> memberList = Arrays.asList(memberOne, memberTwo, memberSeven);
List<Member> flatList = new ArrayList<>();
List<Member> convertedList = convertToFlatList(memberList, flatList);
System.out.println(convertedList);
}
private static List<Member> convertToFlatList(List<Member> memberList, List<Member> flatList)
{
for (Member member : memberList)
{
if (member.getChildren() != null)
{
convertToFlatList(member.getChildren(), flatList);
}
else
{
flatList.add(member);
}
}
return flatList;
}
}
class Member
{
private List<Member> children;
private int memberId;
Member(int memberId)
{
this.memberId = memberId;
}
List<Member> getChildren()
{
return children;
}
void setChildren(List<Member> children)
{
this.children = children;
}
int getMemberId()
{
return memberId;
}
void setMemberId(int memberId)
{
this.memberId = memberId;
}
@Override
public String toString()
{
return String.valueOf(this.memberId);
}
}
如果a
Member
有子项,则可以正确地将子项添加到拼合列表中,但是会错过其Member
本身。只需将成员的else
添加移动到块添加之外,就可以了:
private static List<Member>
convertToFlatList(List<Member> memberList, List<Member> flatList)
{
for (Member member : memberList)
{
// Always add the member to flatList
flatList.add(memeber);
// If it has children, add them toore
if (member.getChildren() != null)
{
convertToFlatList(member.getChildren(), flatList);
}
}
return flatList;
}
这个问题似乎相当复杂,所以我在这里发布这个问题,寻找任何可能的解决方法。 我有地图清单。我想要一个地图列表,但要确保地图被转换成某种层次结构。 原始数据:(列表 此地图列表将转换为以下地图列表:(列表) 作为一个简单的解决方案,我试图手动处理它们(真的很无聊),所以我在寻找使用流或任何其他可能的方式来处理它们的任何高效、干净的方法。 更新朴素的解决方案如下
问题内容: 现在,我想创建一个新列表,其中包含中的所有值。这里的结果应该包含 问题答案: 使用以下方法尝试:
在我的Spring Boot项目中,我有两个类(实体和模型) 在模型中有一个列表 :
问题内容: 如果我有一个,如何通过使用Java 8的功能将其转换为以相同的迭代顺序包含所有对象的? 问题答案: 你可以用于将内部列表(将它们转换为Streams之后)展平为单个Stream,然后将结果收集到列表中:
问题内容: 我有对象T的列表,它具有父属性,其中顶级对象的父属性为null。我想将所有对象放入TreeSet(或TreeMap)中。顶级对象将是所有没有父级的根对象(父级为null),并且它们的下级将是其子级。 像这样 所以我可以得到Ra并找到它的子代(Ca1,Ca2,Ca11,Ca12…。) 更新:很抱歉,可能不清楚,节点指向父节点,如果parent为null,则它们是根节点。问题是父母需要了解
我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。