import com.alibaba.fastjson.JSONArray;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
String arrayStr = "[{\"a\":1,\"b\":\"一级 1\",\"c\":0}, {\"a\":2,\"b\":\"一级 2\",\"c\":0}, {\"a\":3,\"b\":\"一级 3\",\"c\":0}, {\"a\":4,\"b\":\"二级 1-1\",\"c\":1},\n" +
" {\"a\":5,\"b\":\"二级 2-1\",\"c\":2}, {\"a\":6,\"b\":\"二级 2-2\",\"c\":2}, {\"a\":7,\"b\":\"二级 3-1\",\"c\":3}, {\"a\":8,\"b\":\"二级 3-2\",\"c\":3}, \n" +
" {\"a\":9,\"b\":\"三级 1-1-1\",\"c\":4}, {\"a\":10,\"b\":\"三级 2-1-1\",\"c\":5}, {\"a\":11,\"b\":\"三级 2-2-1\",\"c\":6}, {\"a\":12,\"b\":\"三级 3-1-1\",\"c\":7}, \n" +
" {\"a\":13,\"b\":\"三级 3-2-1\",\"c\":8} ] ";
List<Data> treeData = getTreeData(arrayStr);
for (Data treeDatum : treeData) {
System.out.println(treeDatum);
}
}
public static List<Data> getTreeData(String arrayStr){
List<Data> datas = JSONArray.parseArray(arrayStr, Data.class);
List<Data> rtList = doGetTreeData(datas);
return rtList;
}
private static List<Data> doGetTreeData(List<Data> datas) {
List<Data> rtList = new ArrayList<>();
List<Data> ctList = new ArrayList<>();
for (Data data : datas) {
String treeNo = data.getB().split(" ")[1];
data.setSid(treeNo);
if (treeNo.length() > 2) {
data.setPid(treeNo.substring(0,treeNo.length() -2));
}
ctList.add(data);
}
for (Data data : ctList) {
if (data.getPid() == null) {
rtList.add(data);
}
data.setChildren(getChildren(ctList,data.getSid()));
}
return rtList;
}
public static List<Data> getChildren(List<Data> list,String pid){
List<Data> cList = new ArrayList<>();
for (Data data : list) {
if(pid.equals(data.getPid())){
cList.add(data);
}
}
return cList;
}
}
class Data {
private Integer a;
private String b;
private Integer c;
private String sid;
private String pid;
private List<Data> children;
@Override
public String toString() {
return "Data{" +
"a=" + a +
", b='" + b + '\'' +
", c=" + c +
", sid='" + sid + '\'' +
", pid='" + pid + '\'' +
", children=" + children +
'}';
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public Integer getA() {
return a;
}
public void setA(Integer a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public Integer getC() {
return c;
}
public void setC(Integer c) {
this.c = c;
}
public List<Data> getChildren() {
return children;
}
public void setChildren(List<Data> children) {
this.children = children;
}
}