有一个需求,有3个全局缓存的list集合
比如 ACache,BCache,CCache三个list集合,三个集合相互关联,需要递归查询出指定条件的数据
1. 过滤出A的id大于5的数据
2. 通过A的id关联B的aid查出B的数据
3. 然后在通过B的id关联bid查询出C的数据
4 .如果C的aid不为0时,需要递归查询,重复执行1-4步
具体代码结构如下
import java.util.ArrayList;
import java.util.List;
public class Main {
private static List<A> ACache = new ArrayList<>();
private static List<B> BCache = new ArrayList<>();
private static List<C> CCache = new ArrayList<>();
/*初始化数据*/
static {
for (int i = 1; i <= 10; i++) {
ACache.add(new A(i, "a" + i));
for (int j = 1; j <= 3; j++) {
BCache.add(new B(j, "b" + j, i));
for (int k = 1; k <= 3; k++) {
if(i==10) {
CCache.add(new C(k, "c" + k, j, 0));
}else{
CCache.add(new C(k, "c" + k, j, 11));
}
}
}
}
ACache.add(new A(11, "a" + 11));
BCache.add(new B(100, "b" + 100,11));
BCache.add(new B(101, "b" + 101,11));
CCache.add(new C(1000, "c" + 1000, 100, 0));
CCache.add(new C(1001, "c" + 1001, 100, 0));
CCache.add(new C(1002, "c" + 1002, 101, 0));
CCache.add(new C(1003, "c" + 1003, 101, 0));
}
public static void main(String[] args) {
// 1. 过滤出A的id大于5的数据
// 2. 通过A的id关联B的aid查出B的数据
// 3. 然后在通过B的id关联bid查询出C的数据
// 4 .如果C的aid不为0时,需要递归查询,重复执行1-4步
List<A> AList = new ArrayList<>();
List<B> BList = new ArrayList<>();
List<C> CList = new ArrayList<>();
ACache.stream().filter(item -> item.id>5).forEach(AList::add);
getData(AList,BList,CList);
System.out.println(AList);
System.out.println(BList);
System.out.println(CList);
}
private static void getData(List<A> aList, List<B> bList, List<C> cList) {
// 多个list联合递归如何实现
}
public static class A {
public int id;
public String name;
public A(int id, String name) {
this.id = id;
this.name = name;
}
}
public static class B {
public int id;
public String name;
public int aid;
public B(int id, String name, int aid) {
this.id = id;
this.name = name;
this.aid = aid;
}
}
public static class C {
public int id;
public String name;
public int bid;
public int aid;
public C(int id, String name, int bid, int aid) {
this.id = id;
this.name = name;
this.bid = bid;
this.aid = aid;
}
}
}
没看懂你这要求跟递归有什么关系
你完全可以用循环
或者先把每一步筛出来的集合缓存起来,然后用结果集继续后续的步骤
而不是每次都要从头开始筛
这是chatgpt写出来的代码
private static void getData(List<A> aList, List<B> bList, List<C> cList) {
for (A a : aList) {
bList.addAll(BCache.stream().filter(b -> b.aid == a.id).collect(Collectors.toList()));
}
for (B b : bList) {
List<C> tempCList = CCache.stream().filter(c -> c.bid == b.id).collect(Collectors.toList());
cList.addAll(tempCList);
List<A> tempAList = ACache.stream().filter(a -> a.id == b.aid).collect(Collectors.toList());
List<B> tempBList = new ArrayList<>();
if (!tempCList.isEmpty() && tempCList.get(0).aid != 0) {
getData(tempAList, tempBList, cList);
}
}
}