public class Main {
public static void main(String[] args) {
List<HisPresEvaluate> list = getList();
int targetId = 5; // 要查找的id
List<HisPresEvaluate> result = findDataById(list, targetId);
// 打印结果
System.out.println("所有关联到id为 " + targetId + " 的数据:");
for (HisPresEvaluate evaluate : result) {
System.out.println(evaluate);
}
}
private static List<HisPresEvaluate> getList() {
// 模拟的方法,返回真实的 List 数据
List<HisPresEvaluate> list = new ArrayList<>();
list.add(new HisPresEvaluate(1, null));
list.add(new HisPresEvaluate(2, 1));
list.add(new HisPresEvaluate(3, 2));
list.add(new HisPresEvaluate(4, 3));
list.add(new HisPresEvaluate(5, 4));
list.add(new HisPresEvaluate(6, 5));
return list;
}
static class HisPresEvaluate {
private int id;
private Integer data;
public HisPresEvaluate(int id, Integer data) {
this.id = id;
this.data = data;
}
public int getId() {
return id;
}
public Integer getData() {
return data;
}
@Override
public String toString() {
return "HisPresEvaluate{" +
"id=" + id +
", data=" + data +
'}';
}
}
private static List<HisPresEvaluate> findDataById(List<HisPresEvaluate> list, int id) {
List<HisPresEvaluate> result = new ArrayList<>();
Set<Integer> visitedIds = new HashSet<>();
findData(list, id, result, visitedIds);
return result;
}
private static void findData(List<HisPresEvaluate> list, int id, List<HisPresEvaluate> result, Set<Integer> visitedIds) {
for (HisPresEvaluate evaluate : list) {
if (evaluate.getData() != null && evaluate.getData() == id && !visitedIds.contains(evaluate.getId())) {
visitedIds.add(evaluate.getId());
result.add(evaluate);
findData(list, evaluate.getId(), result,visitedIds); // 递归查找下一层关联的数据
}
}
}
}
List<HisPresEvaluate> list = new ArrayList<>();
list.add(new HisPresEvaluate(1, null));
list.add(new HisPresEvaluate(2, 1));
list.add(new HisPresEvaluate(3, 2));
list.add(new HisPresEvaluate(4, 3));
list.add(new HisPresEvaluate(5, 4));
list.add(new HisPresEvaluate(6, 5));
所有关联到id为 1 的数据:
HisPresEvaluate{id=2, data=1}
HisPresEvaluate{id=3, data=2}
HisPresEvaluate{id=4, data=3}
HisPresEvaluate{id=5, data=4}
HisPresEvaluate{id=6, data=5}