计算列表中某个实体的哈希映射 属性 中某个条目的出现次数
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();
我有一个 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();