Map<String, List<ProjectBloggersDO>> map这样的一个集合,如何获取以键为单位的值的字段状态数量, 比如我想找到每一个键对应的值中ProjectBloggersDO的status字段为20的数量,同时又想知道为30的数量
时间: 2024-10-19 12:08:12 浏览: 22
在`Map<String, List<ProjectBloggersDO>>`这样的集合中,你可以通过迭代map并遍历每个`List<ProjectBloggersDO>`来计算特定键对应的`status`字段值为20和30的数量。以下是一个简单的步骤说明:
1. 创建两个变量(例如,int status20Count = 0 和 int status30Count = 0),用于计数。
2. 遍历map,对于每个键-value对:
- 获取`List<ProjectBloggersDO>`,通常这一步会是`List<ProjectBloggersDO> bloggersForKey = map.get(key)`。
- 使用`bloggersForKey.stream()`创建流,以便可以应用过滤器和计数操作。
- 对于`status`为20的情况,添加一个过滤条件(`.filter(blogger -> blogger.getStatus() == 20)`),然后累加符合条件的数量到`status20Count`:
```java
int tempStatus20Count = bloggersForKey.stream()
.filter(blogger -> blogger.getStatus() == 20)
.count();
status20Count += tempStatus20Count;
```
- 同样的,对于`status`为30的情况:
```java
int tempStatus30Count = bloggersForKey.stream()
.filter(blogger -> blogger.getStatus() == 30)
.count();
status30Count += tempStatus30Count;
```
3. 遍历结束后,`status20Count`和`status30Count`将分别存储对应状态的数量。
如果你想要封装成函数形式,可以这样做:
```java
public void countStatuses(Map<String, List<ProjectBloggersDO>> map) {
map.forEach((key, value) -> {
int status20Count = value.stream()
.filter(blogger -> blogger.getStatus() == 20)
.count();
int status30Count = value.stream()
.filter(blogger -> blogger.getStatus() == 30)
.count();
// 打印或者记录结果
System.out.println("Key: " + key + ", Status 20 count: " + status20Count);
System.out.println("Key: " + key + ", Status 30 count: " + status30Count);
});
}
```
阅读全文