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

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

数据关系:

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<CitiesVo> 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<SearchCityCustomVo> list = projectMapperA.searchCity(map);
        List<ProvincesVo> parentVoList = new ArrayList<>();
        list.parallelStream().collect(Collectors.groupingBy(o -> o.getProvincecode(),Collectors.toList())).forEach(
                (id,transfer) -> {
                    ProvincesVo provincesVo = new ProvincesVo();
                    List<CitiesVo> 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);
                }
        );

 

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

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值