准备
@Data
@Builder
public class TreeVo implements Comparator {
private int id;
private String name;
private int parent;
private List<TreeVo> children;
public TreeVo() {
}
public TreeVo(int id, String name, int parent, List<TreeVo> children) {
this.id = id;
this.name = name;
this.parent = parent;
this.children = children;
}
@Override
public String toString() {
return "TreeVo{" +
"id=" + id +
", name='" + name + '\'' +
", parent=" + parent +
", children=" + children +
'}';
}
public static List<TreeVo> allTreeVoList() {
List<TreeVo> list = new ArrayList<>();
TreeVo heBeiTreeVo = TreeVo.builder().id(1).name("河北").parent(0).children(new ArrayList<>()).build();
list.add(heBeiTreeVo);
TreeVo hanTreeVo = TreeVo.builder().id(2).name("邯郸").parent(1).children(new ArrayList<>()).build();
list.add(hanTreeVo);
TreeVo weiTreeVo = TreeVo.builder().id(3).name("魏县").parent(2).children(new ArrayList<>()).build();
list.add(weiTreeVo);
TreeVo beiTreeVo = TreeVo.builder().id(2).name("北京").parent(0).children(new ArrayList<>()).build();
list.add(beiTreeVo);
TreeVo jingTreeVo = TreeVo.builder().id(5).name("北京市").parent(4).children(new ArrayList<>()).build();
list.add(jingTreeVo);
TreeVo chaoTreeVo = TreeVo.builder().id(6).name("朝阳区").parent(5).children(new ArrayList<>()).build();
list.add(chaoTreeVo);
return list;
}
@Override
public int compare(Object o1, Object o2) {
return 0;
}
}
按照某一个字段去重
List<TreeVo> list = TreeVo.allTreeVoList();
Set<TreeVo> objects = new TreeSet<>(Comparator.comparing(TreeVo::getId));
objects.addAll(list);
按照某个字段排序
Treeset默认按照升序排列
Set<TreeVo> objects = new TreeSet<>(Comparator.comparing(TreeVo::getId));
封装一个树形结构
//1.将所有的元素放在maps里
Map<Integer,TreeVo> maps = objects.stream().collect(Collectors.toMap(i -> i.getId(),i->i));
//2.找出父元素id 不在maps键值的 说明无父亲id ,即为顶点id
List<TreeVo> collect = objects.stream().filter(i -> !maps.containsKey(i.getParent())).collect(Collectors.toList());
//3.将object里的每一个对象都去map里找父亲,找到之后获取父亲id 并在父亲里存入子集
for (TreeVo treeVo : objects) {
if(maps.containsKey(treeVo.getParent())){
TreeVo parent = maps.get(treeVo.getParent());
List<TreeVo> children = parent.getChildren();
children.add(treeVo);
}
}
System.out.println(collect);
用线程遍历集合
ExecutorService executorService = Executors.newFixedThreadPool(3);
objects.forEach(s->{
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"开始");
System.out.println(s.toString());
System.out.println(Thread.currentThread().getName()+"结束");
});
});