public FeatureResult getFeatures()

in src/main/java/com/aliyun/openservices/paifeaturestore/dao/FeatureViewTableStoreDao.java [48:93]


    public FeatureResult getFeatures(String[] keys, String[] selectFields) {
        List<String> keyList = Arrays.asList(keys);
        int GROUP_SIZE = 100;
        List<List<String>> groups = new ArrayList<>();
        for (int i = 0; i < keyList.size(); i+= GROUP_SIZE) {
            int end = i + GROUP_SIZE;
            if (end > keyList.size()) {
                end = keyList.size();
            }

            groups.add(keyList.subList(i, end));
        }

        List<CompletableFuture<FeatureResult>> futures =  groups.stream().map(group-> CompletableFuture.supplyAsync(()->{
            return this.doGetFeatures(group, selectFields);
        })).collect(Collectors.toList());
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

        CompletableFuture<List<FeatureResult>> allFutureResults = allFutures.thenApply(v ->
                futures.stream()
                        .map(CompletableFuture::join)
                        .collect(Collectors.toList())
        );

        List<FeatureResult> featureResultList = null;
        try {
            featureResultList = allFutureResults.get();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        FeatureStoreResult featureResult = new FeatureStoreResult();
        featureResult.setFeatureFields(selectFields);
        featureResult.setFeatureFieldTypeMap(this.fieldTypeMap);

        List<Map<String, Object>> featureDataList = new ArrayList<>();
        for (FeatureResult result : featureResultList) {
            if (null != result.getFeatureData()) {
                featureDataList.addAll(result.getFeatureData());
            }
        }


        featureResult.setFeatureDataList(featureDataList);
        return featureResult;
    }