计算列表中某个实体的哈希映射 属性 中某个条目的出现次数

Count occurrences of an entry in a hashmap property of an entity in a list

我有一个 WorkflowTask 实体 Map<String, Object> 属性。

public class WorkflowTask {
    private Map<String, Object> properties;
}

Map 有一个条目 bpm_status,它的值可以是 Not Yet Started

我在数据 table 中显示 List<WorkflowTask> 并检查如下条目:

<p:dataTable value="#{inboxController.list}" var="task">
    <p:column>
        <ui:fragment rendered="#{task.properties.bpm_status eq 'Not Yet Started'}"><b>#{msg.inbox_new_msg}</b>
        </ui:fragment>
    </p:column>
</p:dataTable>

我想显示一个计数器,其中包含此地图条目 bpm_status=Not Yet Started 在列表中的总出现次数。

<p>Amount of new messages: #{inboxController.list.???}</p>

我怎样才能做到这一点?

从 EL 3.0 开始,您可以在 EL 表达式中使用类似 Java8 的 stream and lambda operations,而无需 Java8(已经在 Java7 上工作)。

您的需求可以通过以下方式实现:

<p>Amount of new messages: #{inboxController.list.stream().filter(task -> task.properties.bpm_status eq 'Not Yet Started').count()}</p>

如果您还没有使用 EL 3.0,那么您需要将其计入支持 bean 本身。

int notYetStartedCount = 0;

for (WorkflowTask task : list) {
    if ("Not Yet Started".equals(task.getProperties().get("bpm_status"))) {
        notYetStartedCount++;
    } 
}

如果您有兴趣,上面的 Java8 等价物是:

long notYetStartedCount = list.stream().filter(task -> "Not Yet Started".equals(task.getProperties().get("bpm_status"))).count();