属性:位置
关联点:WarehouseTypes 仓库类型
解释:这个位置可以是那些仓库的
举例:1201,1202,12031204
属性:仓库
关联点:Warehouse 某个仓库
举例:1201
两者关系:
一个仓库下有1个类型 1对1
一个仓库类型字段有多个仓库类型, 1对多
现在:n个仓库 就有n个位置
需求 把仓库下的位置按照树形展开
LabelValue的属性:key,label, value, children[]
最后的数据样式list>
以 label value children[]的形式给前端
//优化三层for循环
//所有对应的value 这个就是所有仓库的相关的了
List activeLocationTypeKeys = systemLocationQry.getActiveLocationTypeKeys();
//所有对应的value 这个就是所有仓库的相关的了
List mdLocationInfoTree =new ArrayList<>();
mdLocationInfoTree.addAll(activeLocationTypeKeys.stream().map(key -> {parent.setLabel(LocationTypeEnum.getLabel(key));parent.setValue(key);parent.setKey(LocationTypeEnum.getLabel(key));parent.setChildren(locationInfoDTOList.stream().filter(location -> Arrays.asList(location.getLocationTypeIds().split(",")).contains(key)).map(location -> {LabelValue children = new LabelValue();children.setLabel(location.getLocationName());children.setValue(location.getId());return children;}).collect(Collectors.toList()));return parent;}).collect(Collectors.toList()));
list的addAll()方法
Java List.addAll()方法:添加所有元素到列表中
Java 集合类的 List.addAll() 方法用于将指定 collection中的所有元素添加到列表。
stream().map方法
在Java 8中stream().map(),可以将对象转换为其他对象
这个东西说不来,看感觉吧…看上面的代码
activeLocationTypeKeys是个字符串集合,map(key->
这个key就是里面的每一个字符串,类似增强for循环
stream() .filter方法
主要作用就是模拟sql查询,从集合中查询想要的数据
上面的代码是location,这里查的是
Arrays.asList(location.getLocationTypeIds().split(“,”)).contains(key))
这里的location指的是locationInfoDTOList
然后去查找上面Arrays.asList中包含了key的Arrays.asLis集合元素
TMD确实是很绕…
stream.map().collect(Collectors.toList()))
Collectors这个就是操作集合的方法可以转换成什么样的集合
contains方法顾名思义,不做解释