需求:续上一篇--去掉不包含555的数据,并且子集有的不管父级是否有都需要显示
package com.bstek.dorado.sample.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestList {
private static final String STR = "神亦石555";
/**
* @方法名称 main
* @功能描述 <pre></pre>
* @作者 xingsfdz
* @创建时间 2019-2-20 下午9:37:31
* @param args
*/
public static void main(String[] args) {
List<User> users = setUsers();
System.out.println("======================================除数前");
printUsers(users);
String flag = "0";
users = getUsers2(users, flag);
System.out.println("======================================除数后");
printUsers(users);
}
/**
*
* @方法名称 getUsers
* @功能描述 <pre>获取用户</pre>
* @作者 xingsfdz
* @创建时间 2019-2-20 下午10:08:02
* @param usres
*/
public static List<User> getUsers(List<User> users){
//去掉4,5
for(User u : users){
if(u.getUsername().equals(STR)) {
users.remove(u);
}
if(u.getUsers() != null && !u.getUsers().isEmpty()){
getUsers(u.getUsers());
}
}
return users;
}
/**
*
* @方法名称 getUsers2
* @功能描述 <pre>递归除数</pre>
* @作者 xingsfdz
* @创建时间 2019-2-20 下午11:27:53
* @param list
* @return
*/
public static List<User> getUsers2(List<User> list, String flag){
//去掉555
Iterator<User> iterator = list.iterator();
while(iterator.hasNext()){
flag = "0";
User user = (User) iterator.next();
if(user.getUsers() != null && !user.getUsers().isEmpty()){
getUsers2(user.getUsers(), flag);
}
if(user.getUsername().equals(STR)){
flag = "1";
}
if(flag == "0" && (user.getUsers() == null || user.getUsers().isEmpty())){
iterator.remove();
}
}
return list;
}
/**
*
* @方法名称 printUsers
* @功能描述 <pre>打印数据</pre>
* @作者 xingsfdz
* @创建时间 2019-2-20 下午11:28:34
* @param users
*/
public static void printUsers(List<User> users){
for(User u : users){
System.out.println(u.getUsername() + "-----------" + u.getName());
if(u.getUsers() != null && !u.getUsers().isEmpty()){
printUsers(u.getUsers());
}
}
}
/**
*
* @方法名称 setUsers
* @功能描述 <pre>构造数据</pre>
* @作者 xingsfdz
* @创建时间 2019-2-20 下午11:28:52
* @return
*/
public static List<User> setUsers(){
User u1 = new User("神亦石1", "赵");
User u2 = new User("神亦石2", "钱");
User u3 = new User("神亦石3", "孙");
User u4 = new User("神亦石555", "李");
User u5 = new User("神亦石555", "杨");
User u6 = new User("神亦石6", "周");
User u7 = new User("神亦石7", "张");
User u8 = new User("神亦石8", "黄");
User u9 = new User("神亦石9", "龙");
List<User> users0 = new ArrayList();
List<User> users1 = new ArrayList();
List<User> users2 = new ArrayList();
List<User> users3 = new ArrayList();
users0.add(u1);
users0.add(u2);
users1.add(u3);
users1.add(u4);
users2.add(u5);
users2.add(u6);
u7.setUsers(users0);
u1.setName(u7.getUsername());
u2.setName(u7.getUsername());
u8.setUsers(users1);
u3.setName(u8.getUsername());
u4.setName(u8.getUsername());
users2.add(u7);
users2.add(u8);
u7.setName(u9.getUsername());
u8.setName(u9.getUsername());
u5.setName(u9.getUsername());
u6.setName(u9.getUsername());
u9.setUsers(users2);
users3.add(u9);
return users3;
}
//神亦石8 下面包含5的 不去掉 其他的5去掉
}
输出结果:
======================================除数前
神亦石9-----------龙
神亦石555-----------神亦石9
神亦石6-----------神亦石9
神亦石7-----------神亦石9
神亦石1-----------神亦石7
神亦石2-----------神亦石7
神亦石8-----------神亦石9
神亦石3-----------神亦石8
神亦石555-----------神亦石8
======================================除数后
神亦石9-----------龙
神亦石555-----------神亦石9
神亦石8-----------神亦石9
神亦石555-----------神亦石8
实体类:
package com.bstek.dorado.sample.util;
import java.util.List;
/**
*
* @类名称 User.java
* @类描述 <pre>user类</pre>
* @作者 xingsfdz xingsfdz@163.com
* @创建时间 2019-2-20 下午10:05:42
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019-2-20
* ----------------------------------------------
* </pre>
*/
public class User {
User(){};
User(String username, String name){
this.username = username;
this.name = name;
};
private String username;
private String name;
private List<User> users;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}