|
|
|
@ -2,10 +2,7 @@ package cn.estsh.i3plus.pojo.aps.common;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
|
|
|
|
@ -235,6 +232,34 @@ public class BeanRelation {
|
|
|
|
|
return index == 0 && bNotLast;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取关联对象集合,排除重复的对象
|
|
|
|
|
* @param bean 实体对象
|
|
|
|
|
* @param holder 第一个关联路径
|
|
|
|
|
* @param args 后续关联路径
|
|
|
|
|
* @param <T> 返回关联对象的实体类型
|
|
|
|
|
* @return 返回的List集合为拷贝的,外界可以对其修改。
|
|
|
|
|
*/
|
|
|
|
|
public static <T extends BaseBean> Set<T> listUnique(BaseBean bean, Enum<?> holder, Enum<?>... args) {
|
|
|
|
|
Set<T> result = new HashSet<>();
|
|
|
|
|
List<BaseBean> nextBeans = list(bean, holder);
|
|
|
|
|
for (BaseBean nextBean : nextBeans) {
|
|
|
|
|
listUniqueImpl(result, nextBean, args, 0);
|
|
|
|
|
}
|
|
|
|
|
result.remove(bean);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static <T extends BaseBean> void listUniqueImpl(Set<T> result, BaseBean bean, Enum<?>[] holders, int index) {
|
|
|
|
|
if (index >= holders.length) {
|
|
|
|
|
result.add((T)bean);
|
|
|
|
|
} else {
|
|
|
|
|
List<BaseBean> nextBeans = list(bean, holders[index]);
|
|
|
|
|
for (BaseBean nextBean : nextBeans) {
|
|
|
|
|
listUniqueImpl(result, nextBean, holders, index + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|