diff --git a/renren-admin/src/main/java/io/renren/modules/resource/service/impl/ResourceServiceImpl.java b/renren-admin/src/main/java/io/renren/modules/resource/service/impl/ResourceServiceImpl.java index f9669f41..002e3006 100644 --- a/renren-admin/src/main/java/io/renren/modules/resource/service/impl/ResourceServiceImpl.java +++ b/renren-admin/src/main/java/io/renren/modules/resource/service/impl/ResourceServiceImpl.java @@ -459,27 +459,60 @@ public class ResourceServiceImpl extends CrudServiceImpl resourceDTOS; if (orderField.equals("total")) { // 对总体评价特殊处理 List ids = new ArrayList<>(); + ForkJoinPool customThreadPool = new ForkJoinPool(CPU_NUM * 2); switch (orderType.toUpperCase()) { case "DESC": // total 倒序 - ids = selectDTOPageSpecilTotal.stream().map(Map.class::cast).sorted(Comparator.comparing(x -> { - Map index = (Map) x; - String string = (index.get("total") == null) ? "0" : index.get("total").toString(); - return Long.valueOf(string); - } - ).reversed()).skip((long) (pageNum - 1) * pageSize).limit(pageSize).map(x -> - Long.valueOf(x.get("id").toString()) - ).collect(Collectors.toList()); + try { + ids = (List) customThreadPool.submit(() -> { + selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> { + Map index = (Map) x; + String string = (index.get("total") == null) ? "0" : index.get("total").toString(); + return Long.valueOf(string); + } + ).reversed()).skip((long) (pageNum - 1) * pageSize).limit(pageSize).map(x -> + Long.valueOf(x.get("id").toString()) + ).limit(pageSize).collect(Collectors.toList()); + }).get(); + } catch (InterruptedException e) { + logger.error("InterruptedException", e); + } catch (ExecutionException e) { + logger.error("ExecutionException", e); + } +// ids = selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> { +// Map index = (Map) x; +// String string = (index.get("total") == null) ? "0" : index.get("total").toString(); +// return Long.valueOf(string); +// } +// ).reversed()).skip((long) (pageNum - 1) * pageSize).limit(pageSize).map(x -> +// Long.valueOf(x.get("id").toString()) +// ).limit(pageSize).collect(Collectors.toList()); break; case "ASC": // total 升序 - ids = selectDTOPageSpecilTotal.stream().map(Map.class::cast).sorted(Comparator.comparing(x -> { - String string = (x.get("total") == null) ? "0" : x.get("total").toString(); - return Long.valueOf(string); - } - )).skip((pageNum - 1) * pageSize).limit(pageSize).map(x -> - Long.valueOf(x.get("id").toString()) - ).collect(Collectors.toList()); + try { + ids = (List) customThreadPool.submit(() -> { + selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> { + String string = (x.get("total") == null) ? "0" : x.get("total").toString(); + return Long.valueOf(string); + } + )).skip((pageNum - 1) * pageSize).limit(pageSize).map(x -> + Long.valueOf(x.get("id").toString()) + ).limit(pageSize).collect(Collectors.toList()); + }).get(); + } catch (InterruptedException e) { + logger.error("InterruptedException", e); + } catch (ExecutionException e) { + logger.error("ExecutionException", e); + } +// ids = selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> { +// String string = (x.get("total") == null) ? "0" : x.get("total").toString(); +// return Long.valueOf(string); +// } +// )).skip((pageNum - 1) * pageSize).limit(pageSize).map(x -> +// Long.valueOf(x.get("id").toString()) +// ).limit(pageSize).collect(Collectors.toList()); break; } + customThreadPool.shutdown(); resourceDTOS = resourceDao.selectDTOPage(resourceDTO, null, null, null, null, ids); if ("DESC".equals(orderType)) { resultPage.setRecords(resourceDTOS.stream().sorted(Comparator.comparing(x -> {