java获取树的指定层级数据
获取数据核心精简代码
/**
* @Description: 获取指定层级的数据
* @param: [list, id, pid, floorType] floorType指定楼层
* @Return: java.util.List
* @Author: Mr.ZZC
* @Date: 2022/1/20 18:00
*/
public static <T> List getListOnFloorObj(List list, String id, String pid, int floorType) {
String ids = list.stream().filter(x -> x != null).map(x -> getJSONString(x, id)).collect(Collectors.joining(",")).toString();
List<T> firstFloor = (List<T>) list.stream().filter(x -> !ids.contains(getJSONString(x, pid))).collect(Collectors.toList());
List<T> otherFloor = (List<T>) list.stream().filter(x -> ids.contains(getJSONString(x, pid))).collect(Collectors.toList());
return floorType == 0 ? firstFloor : getListOnFloorObj(otherFloor, id, pid, --floorType);//前减减传入的是--后的值后减减回死循环酸
}
public static String getJSONString(Object x, String key) {
return JSONObject.parseObject(JSONObject.toJSONString(x)).get(key).toString();
}
测试
public static void main(String[] args) {
ArrayList maps = new ArrayList<HashMap>();
for (int i = 0; i <= 2; i++) {
HashMap<String, Object> testMap1 = new HashMap<>();
testMap1.put("id", "A" + i);
testMap1.put("pid", "DDD" + 0);
testMap1.put("value", 500);
maps.add(testMap1);
}
for (int i = 0; i <= 2; i++) {
HashMap<String, Object> testMap1 = new HashMap<>();
testMap1.put("id", "B" + i);
testMap1.put("pid", "A" + i);
testMap1.put("value", 600);
maps.add(testMap1);
}
for (int i = 0; i <= 12; i++) {
HashMap<String, Object> testMap1 = new HashMap<>();
testMap1.put("id", "C" + i);
testMap1.put("pid", "B" + i % 3);
testMap1.put("value", 700);
maps.add(testMap1);
}
List<HashMap> listOnFloorObj0 = getListOnFloorObj(maps, "id", "pid", 0);
List<HashMap> listOnFloorObj1 = getListOnFloorObj(maps, "id", "pid", 1);
List<HashMap> listOnFloorObj2 = getListOnFloorObj(maps, "id", "pid", 2);
listOnFloorObj0.stream().forEach(x -> System.out.println(JSONObject.toJSONString(x)));
System.out.println();
listOnFloorObj1.stream().forEach(x -> System.out.println(JSONObject.toJSONString(x)));
System.out.println();
listOnFloorObj2.stream().forEach(x -> System.out.println(JSONObject.toJSONString(x)));
System.out.println("看断点数据");
}
最短的代码送给不能短的你 ~ 记得点赞哦~