Java 8优雅实现List<List<BusinessDomainPo>> 转为 Tree<BusinessDomainPo>
在Java 8中,可以使用流操作和递归来实现将List的List
public class Main {
public static void main(String[] args) {
List<List<BusinessDomainPo>> listOfLists = new ArrayList<>();
listOfLists.add(Arrays.asList(new BusinessDomainPo("A"), new BusinessDomainPo("B")));
listOfLists.add(Arrays.asList(new BusinessDomainPo("C"), new BusinessDomainPo("D")));
listOfLists.add(Arrays.asList(new BusinessDomainPo("E"), new BusinessDomainPo("F")));
List<BusinessDomainPo> treeList = flatten(listOfLists);
treeList.forEach(System.out::println);
}
private static List<BusinessDomainPo> flatten(List<List<BusinessDomainPo>> listOfLists) {
return listOfLists.stream()
.flatMap(List::stream)
.map(businessDomainPo -> {
List<BusinessDomainPo> children = flatten(listOfLists.stream()
.filter(list -> list.contains(businessDomainPo))
.collect(Collectors.toList()));
businessDomainPo.setChildren(children);
return businessDomainPo;
})
.collect(Collectors.toList());
}
}
在上面的示例代码中,BusinessDomainPo是一个具有String name和List<BusinessDomainPo> children属性的类。flatten方法通过使用流操作和递归来实现将List的ListflatMap将所有的BusinessDomainPo对象合并为一个流。然后,我们使用map操作来设置每个BusinessDomainPo对象的子节点,通过递归调用flatten方法来获取子节点的列表。最后,我们使用collect将结果收集为一个List
注意:上述代码假设每个BusinessDomainPo对象是唯一的,并且子节点的顺序与输入列表中的顺序相同。如果这些假设不成立,您可能需要根据具体情况进行适当的调整。
原文地址: https://www.cveoy.top/t/topic/qDlQ 著作权归作者所有。请勿转载和采集!