使用Java 8如何根据过滤条件按列表和分组进行过滤,并将其计数转换为Map

我想在下面将for循环转换为Java8。但是在过滤状态列表并将其分组为一个状态和总计数时遇到问题。 我尝试过,但是对于每个“ LIVE”,“ DRAFT”,“ TEST”,必须循环3次并获得3个不同的地图。使用Java 8是否可以进入一个循环?

其中DRAFT,TEST和LIVE再次是来自工作流实例的状态组合,例如DRAFT = {“ DRAFT_EDIT”,“ DRAFT_SAVE”}。我想根据定义的这种组合将所有状态分为3种

    Map<String, Integer> summaryMap = new HashMap<>();
int l =0, d =0, t =0;
        for(WorkflowInstance instance : workflowInstances) {
                if (liveStatuses.contains(instance.getStatus())) {
                    summaryMap.put("LIVE", l++);
                } else if (testStatuses.contains(instance.getStatus())) {
                    summaryMap.put("TEST", t++);
                } else if (draftStatuses.contains(instance.getStatus())) {
                    summaryMap.put("DRAFT", d++);
                }
        }

Java 8分别用于DRAF,TEST和LIVE

    map.put("DRAFT", workflowInstances.stream().filter(inst-> Constants.DRAFT_STATUS.contains(inst.getStatus())).collect(
                    Collectors.groupingBy(WorkflowInstance::getStatus, Collectors.counting())
            ).entrySet().stream().mapToLong(e-> e.getValue()).sum());

    map.put("LIVE", workflowInstances.stream().filter(inst-> Constants.LIVE_STATUS.contains(inst.getStatus())).collect(
                    Collectors.groupingBy(WorkflowInstance::getStatus, Collectors.counting())
            ).entrySet().stream().mapToLong(e-> e.getValue()).sum());

我不想一遍遍地循环3次,而是将它们归类。 任何帮助,将不胜感激。

评论