public Supplier<List<String>> createLazyIdSupplier(Supplier<List<String>> idSupplier) { return Lazy.val(() -> { List<String> ids = idSupplier.get(); return (Supplier) () -> ids; }, Supplier.class); }
private CandidateDimension parse(DimensionContext context, JSONArray jsonConfig) { List<CandidateDimensionParserStrategy.StrategyConfig> configList = jsonConfig.stream() .filter(json -> json instanceof JSONObject) .map(JSONObject.class::cast) .filter(json -> json.get("dimension") != null && CollectionUtils.isNotEmpty(json.getJSONArray("idList"))) .map(json -> { CandidateDimensionParserStrategy.StrategyConfig config = json.toJavaObject(CandidateDimensionParserStrategy.StrategyConfig.class); if (config.getConfig() == null) { config.setConfig(json); } return config; }).collect(Collectors.toList()); if (configList.isEmpty()) { return CandidateDimension.empty; } return Lazy.val(() -> { List<String> list = configList.stream() .flatMap(config -> strategies .stream() .filter(strategy -> strategy.support(config.getDimension())) .map(strategy -> strategy.parse(context, config)) .filter(CollectionUtils::isNotEmpty) .flatMap(Collection::stream) .filter(StringUtils::hasText) ).collect(Collectors.toList()); return (CandidateDimension) () -> list; }, CandidateDimension.class); }
@Override @SuppressWarnings("all") public List<CandidateInfo> getCandidateInfo(Task task) { return Lazy.val(() -> { DimensionContext context = new DimensionContext(); context.setCreatorId(doingUser); context.setActivityId(activityId); context.setProcessDefineId(processDefineId); context.setTask(task); CandidateDimension dimension = candidateDimensionParser .parse(context, configEntity.getCandidateDimension()); return dimension.getCandidateUserIdList() .stream() .distinct() .map(userId -> Lazy.val(() -> new CandidateInfo() { @Override public Authentication user() { return AuthenticationHolder.get(userId); } @Override public PersonnelAuthentication person() { return PersonnelAuthenticationHolder.getByUserId(userId); } }, CandidateInfo.class)) .collect(Collectors.toList()); }, List.class); }
@Override public Collector<?, ?, ?> build(Type containerType) { Class<?> erasedType = getCollectionType(containerType); return collectors.getOrElse(erasedType, Lazy.val(() -> resolveDefaultCollector(erasedType).get(), Collector.class)); } }
private CandidateDimension parse(DimensionContext context, JSONArray jsonConfig) { List<CandidateDimensionParserStrategy.StrategyConfig> configList = jsonConfig.stream() .filter(json -> json instanceof JSONObject) .map(JSONObject.class::cast) .filter(json -> json.get("dimension") != null && CollectionUtils.isNotEmpty(json.getJSONArray("idList"))) .map(json -> { CandidateDimensionParserStrategy.StrategyConfig config = json.toJavaObject(CandidateDimensionParserStrategy.StrategyConfig.class); if (config.getConfig() == null) { config.setConfig(json); } return config; }).collect(Collectors.toList()); if (configList.isEmpty()) { return CandidateDimension.empty; } return Lazy.val(() -> { List<String> list = configList.stream() .flatMap(config -> strategies .stream() .filter(strategy -> strategy.support(config.getDimension())) .map(strategy -> strategy.parse(context, config)) .filter(CollectionUtils::isNotEmpty) .flatMap(Collection::stream) .filter(StringUtils::hasText) ).collect(Collectors.toList()); return (CandidateDimension) () -> list; }, CandidateDimension.class); }
@Override @SuppressWarnings("all") public List<CandidateInfo> getCandidateInfo(Task task) { return Lazy.val(() -> { DimensionContext context = new DimensionContext(); context.setCreatorId(doingUser); context.setActivityId(activityId); context.setProcessDefineId(processDefineId); context.setTask(task); CandidateDimension dimension = candidateDimensionParser .parse(context, configEntity.getCandidateDimension()); return dimension.getCandidateUserIdList() .stream() .distinct() .map(userId -> Lazy.val(() -> new CandidateInfo() { @Override public Authentication user() { return AuthenticationHolder.get(userId); } @Override public PersonnelAuthentication person() { return PersonnelAuthenticationHolder.getByUserId(userId); } }, CandidateInfo.class)) .collect(Collectors.toList()); }, List.class); }