数据库二维表转父子关系,java,stream,list

需求描述:把数据库中的省市二维表,查询到内存中后,转换为父子层级关系。通过jdk8中的stream方式实现。

数据关系:

数据库二维表转父子关系,java,stream,list_第1张图片

320004    福建省    320507    南平市
430000    湖南省    430100    长沙市
320000    江苏省    320583    昆山市
430000    湖南省    430681    汩罗市
210000    辽宁省    210100    沈阳市
320000    江苏省    320500    苏州市区
430000    湖南省    430381    湘乡市
130000    河北省    130700    张家口市

 

代码实现:

父类,省的javabean

import lombok.Data;
import java.util.List;

@Data
public class ProvincesVo {

    private String provinceCode;
    private String provinceName;
    private List cities;
}

子类,市的javabean

import lombok.Data;

@Data
public class CitiesVo {

    private String cityCode;
    private String cityName;

    public CitiesVo(){}

    public CitiesVo(String cityCode, String cityName) {
        this.cityCode = cityCode;
        this.cityName = cityName;
    }
}

具体处理业务逻辑:

List list = projectMapperA.searchCity(map);
        List parentVoList = new ArrayList<>();
        list.parallelStream().collect(Collectors.groupingBy(o -> o.getProvincecode(),Collectors.toList())).forEach(
                (id,transfer) -> {
                    ProvincesVo provincesVo = new ProvincesVo();
                    List childVoList = transfer.stream().map(o -> {
                        provincesVo.setProvinceCode(o.getProvincecode());
                        provincesVo.setProvinceName(o.getProvincename());
                        return new CitiesVo(o.getCitycode(),o.getCityname());
                    }).collect(Collectors.toList());
                    provincesVo.setCities(childVoList);
                    parentVoList.add(provincesVo);
                }
        );

 

描述:在处理嵌套层测时候,觉得不太合适,希望各位小伙伴提出改进

 

 

 

你可能感兴趣的:(JDK)