フロントエンドtree jsonフォーマットデータの取得を再帰的に実現
24991 ワード
フロントエンドtree jsonフォーマットデータの取得を再帰的に実現問題説明 構想 コード実装 問題の説明
各ビジネス・エンティティの階層関係を表すために、バックグラウンド・システムの多くのテーブル構造は、次のような構造に従って設計されています.
id
pid
name
しかし、フロントエンドに必要なデータ構造はTree JSON構造である.
構想
再帰的な考え方:再帰終了条件(listでpidがフィルタされた結果listは空) 再帰終了時の処理方法(処理しない) を与える.繰り返し論理(treeノードを組み立てるtreeノードListに追加) を抽出する.
まず、再帰関数のパラメータを確認します.クエリーが必要なフラットなビジネスエンティティList リスト結果エンティティのセットが必要です.エンティティ内の3つのフィールド(カスタムフィールド名)id,name,childrenが必要です.ここではMap を簡単に使用します.現在のレベルのpid をクエリー
コード実装
各ビジネス・エンティティの階層関係を表すために、バックグラウンド・システムの多くのテーブル構造は、次のような構造に従って設計されています.
id
pid
name
しかし、フロントエンドに必要なデータ構造はTree JSON構造である.
[{
"id": 1,
"name": " ",
"children": [{
"id": 3,
"name": " ",
"children": [{
"id": 5,
"name": " ",
"children": []
}]
}, {
"id": 4,
"name": " ",
"children": [{
"id": 6,
"name": " ",
"children": []
}]
}]
}, {
"id": 2,
"name": " ",
"children": []
}]
構想
再帰的な考え方:
まず、再帰関数のパラメータを確認します.
コード実装
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
public class ListToTreeTest {
public static void main(String[] args) throws Exception {
List<Item> list = getList();
ArrayList<LinkedHashMap<String, Object>> tree = new ArrayList<>();
loadTree(list, tree, 0l);
String s = new ObjectMapper().writeValueAsString(tree);
System.out.println(s);
}
public static void loadTree(List<Item> list, List<LinkedHashMap<String, Object>> listTreeNode, Long pid) {
LinkedHashMap<String, Object> tmpMap = null;
// list pid Item
List<Item> tmpList = list.stream().filter(x -> x.getPid() == pid).collect(Collectors.toList());
for(Item item : tmpList) {
tmpMap = new LinkedHashMap<>();
tmpMap.put("id", item.getId());
tmpMap.put("name", item.getName());
tmpMap.put("children", new ArrayList<LinkedHashMap<String,Object>>());
listTreeNode.add(tmpMap);
//children , children pid id
loadTree(list, (List<LinkedHashMap<String, Object>>) tmpMap.get("children"), (Long) tmpMap.get("id"));
}
}
//
public static List<Item> getList() {
Item parent1 = new Item();
parent1.setId(1l);
parent1.setName(" ");
parent1.setPid(0l);
Item parent2 = new Item();
parent2.setId(2l);
parent2.setName(" ");
parent2.setPid(0l);
Item parent3 = new Item();
parent3.setId(3l);
parent3.setName(" ");
parent3.setPid(1l);
Item parent4 = new Item();
parent4.setId(4l);
parent4.setName(" ");
parent4.setPid(1l);
Item parent5 = new Item();
parent5.setId(5l);
parent5.setName(" ");
parent5.setPid(3l);
Item parent6 = new Item();
parent6.setId(6l);
parent6.setName(" ");
parent6.setPid(4l);
ArrayList<Item> items = new ArrayList<>();
items.add(parent1);
items.add(parent2);
items.add(parent3);
items.add(parent4);
items.add(parent5);
items.add(parent6);
return items;
}
}
//
class Item {
private Long id;
private String name;
private Long pid;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
}