我有一个workStatuses列表。每个workStatus都有自己的名字和时间。我可以在迭代每个workStatus时执行workStatus.getName()
。
for (workStatus ws: workStatuses) {
String name = ws.getName();
}
接下来,我有一个名为 nameList。
的名称列表List<String> nameList = new ArrayList<String>();
nameList.add("Completed");
nameList.add("Failed");
现在我正在使用HashMap来计算每个名称都有的workStatus数量。所以我必须
我做了什么:
Integer numberOfWorkStatus =0;
Map<String,Integer> hm = new HashMap<String,Integer>();
for(WorkStatus ws: workStatuses) {
if (ws.getName()!=null && nameList.contains(ws.getName())) {
numberOfWorkStatus++;
hm.put(ws.getName(), numberOfWorkStatus);
}
}
return hm;
如果我以正确的方式做到这一点,有人可以建议我吗?
答案 0 :(得分:3)
您可以使用流API,如果我做对了,请执行以下操作:
// List<WorkStatus> workStatuses = ...
workStatuses.stream().collect(
Collectors.groupingBy(WorkStatus::getName, Collectors.counting()));
因此您将拥有Map<String, Long>
答案 1 :(得分:1)
你可以这样做:
for(Stirng name :nameList)
hm.put(name, 0);
for(WorkStatus ws: workStatuses) {
if( hm.get(ws.getName() != null)
hm.put(ws.getName(), hm.get(ws.getName()) + 1);
}
hm将包含workStauses中存在的每个名称的计数。
答案 2 :(得分:0)
您可以将其更改为:
for (String str:nameList){
if (str.contains(ws.getName())) {
totalCount++;
hm.put(ws.getName(), totalCount);
}
}
您无法直接从列表检查字符串,而您在HM中输入的应该是 ws 。
答案 3 :(得分:0)
Map<String, Integer> hm = new HashMap<>();
for (WorkStatus ws : workStatuses) {
if (ws.getName() != null && nameList.contains(ws.getName())) {
hm.putIfAbsent(ws.getName(), 0);
hm.put(ws.getName(), hm.get(ws.getName()) + 1);
}
}