public static <T> List<T> findByPId(String parentId, Function<T, String> idFunction, Function<List<String>, List<T>> findFunction) {
List<T> ts = new ArrayList<>();
findModelsByParentId(ts, Arrays.asList(parentId), findFunction, idFunction);
return ts;
}
private static <T> void findModelsByParentId(List<T> ts, List<String> parentIds, Function<List<String>, List<T>> findFunction, Function<T, String> idFunction) {
if (null == parentIds || parentIds.size() == 0) {
return;
}
List<T> models = findFunction.apply(parentIds );
if (null != models && models.size() > 0) {
ts.addAll(models);
List<String> newPIds = list2list(models, t -> idFunction.apply(t));
findModelsByParentId(ts, newPIds, findFunction, getIdFun);
}
}
示例代码:
@Autowired
AreaDao areaDao;
public void doSome() {
List<Area> areas = ListUtils.findByPId("300000", Area::getId, pIds -> findAreas(pIds));
System.out.println(areas.size());
}
private List<Area> findAreas(List<String> pIds) {
AreaQuery q = new AreaQuery();
q.setpIds(pIds);
return areaDao.findByQuery(q);
}
递归查询
本文介绍了一种使用Java实现的递归查询方法,通过提供父ID来查找所有子项及其子项的子项等,直至没有更多子级为止。该方法利用了函数式编程中的函数作为参数传递的思想,并展示了具体的实现代码及示例。
3146

被折叠的 条评论
为什么被折叠?



