1. 双重循环
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、网页空间、营销软件、网站建设、同仁网站维护、网站推广。2. 递归
3. Stream()
1. 双重循环
@Override
public ListgetAddressTree1() {// 获取数据库中的所有address数据
Listlist = this.baseMapper.getAddressTree();
// 返回的树形数据
Listtree = new ArrayList();
// 第一次遍历
for (Address address : list) { // 找到根节点,这里我的根节点的pid为0
if (address.getPid().equals("0")) { tree.add(address);
}
// 定义list用于存储子节点
Listchildren = new ArrayList();
// 再次遍历list,找到子节点
for (Address node : list) { // 子节点的pid等于父节点的id
if (node.getPid().equals(address.getId())) {children.add(node);
}
}
// 给父节点设置子节点
address.setChildren(children);
}
return tree;
}
2. 递归
@Override
public ListgetAddressTree2() {// 获取数据库中的所有address数据
Listlist = this.baseMapper.getAddressTree();
// 返回的树形数据
Listtree = new ArrayList();
// 第一次遍历
for (Address address : list) {// 找到根节点,这里我的根节点的pid为0
if (address.getPid().equals("0")) {tree.add(findChild(address, list));
}
}
return tree;
}
private Address findChild(Address address, Listlist) {// 定义list用于存储子节点
Listchildren = new ArrayList();
for (Address node : list) {// 找到根节点,这里我的根节点的pid为0
if (node.getPid().equals(address.getId())) {// 调用递归
children.add(findChild(node, list));
}
}
address.setChildren(children);
return address;
}
3. Stream()
@Override
public ListgetAddressTree() {// 获取数据库中的所有address数据
Listaddresses = this.baseMapper.getAddressTree();
// 操作所有的address数据
// 通过Collectors.groupingBy(Address::getPid)方法对addresses按照Pid进行分组,也就是将pid相同的放在一起
Map>addressMap = addresses.stream().collect(Collectors.groupingBy(Address::getPid));
// 循环addresses,给它设置children属性
addresses.forEach(address ->{address.setChildren(addressMap.get(address.getId()));
});
// 现在已经形成了多棵树,最后我们再通过filter()方法挑选出根节点的那颗树即可。 这里我的根节点的pid为0
ListresultList = addresses.stream().filter(item ->item.getPid().equals("0"))
.collect(Collectors.toList());
return resultList;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧