public List findByNotificationTyp(ListidList, NotificationType notificationType) {
List allList = complaintsNotifyExportViewDao.findAll(new Specification() {
@Overridepublic Predicate toPredicate(Root root, CriteriaQuery>query, CriteriaBuilder cb) {
List predicates = new ArrayList();
List listOr = new ArrayList();
Predicate [] predicateOr= null;if(CollectionUtils.isNotEmpty(idList)) {
Path path = root.get("complaintsId");if (idList.size() >MAX_LENGTH) {
List> lists = segmentationList(idList, MAX_LENGTH-1);for (Listlist : lists) {
CriteriaBuilder.In in = cb.in(path);for (int i = 0; i < list.size(); i++) {in.value(list.get(i));
}
listOr.add(in);
}
predicateOr= newPredicate[listOr.size()];
}else{
CriteriaBuilder.In in = cb.in(path);for (int i = 0; i
}
predicates.add(in);
}
}if (null !=notificationType) {
predicates.add(cb.equal(root.get("notificationType").as(NotificationType.class), notificationType));
}
Predicate [] predicateAnd= newPredicate[predicates.size()];if (predicateOr != null) {return query.where(cb.and(predicates.toArray(predicateAnd)), cb.or(listOr.toArray(predicateOr))).getRestriction();
}else{return query.where(cb.and(predicates.toArray(predicateAnd))).getRestriction();
}
}
});returnallList;
}public static List> segmentationList(List targe, intsize) {
List> listArr = new ArrayList>();//获取被拆分的数组个数
int arrSize = targe.size() % size == 0 ? targe.size() /size : targe
.size()/ size + 1;for (int i = 0; i < arrSize; i++) {
List sub = new ArrayList();//把指定索引数据放入到list中
for (int j = i * size; j <= size * (i + 1) - 1; j++) {if (j <= targe.size() - 1) {
sub.add(targe.get(j));
}
}
listArr.add(sub);
}returnlistArr;
}