在Java 8中,可以使用流操作和递归来实现将List的List转换为Tree的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 nameList<BusinessDomainPo> children属性的类。flatten方法通过使用流操作和递归来实现将List的List转换为Tree的List。首先,我们使用flatMap将所有的BusinessDomainPo对象合并为一个流。然后,我们使用map操作来设置每个BusinessDomainPo对象的子节点,通过递归调用flatten方法来获取子节点的列表。最后,我们使用collect将结果收集为一个List对象并返回。

注意:上述代码假设每个BusinessDomainPo对象是唯一的,并且子节点的顺序与输入列表中的顺序相同。如果这些假设不成立,您可能需要根据具体情况进行适当的调整。

Java 8优雅实现List<List<BusinessDomainPo>> 转为 Tree<BusinessDomainPo>

原文地址: https://www.cveoy.top/t/topic/qDlQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录