对List<Map<String, Object>>中每个字段统计不为空的数量
时间: 2023-10-14 22:26:01 浏览: 51
可以使用Java 8的Stream API来统计List<Map<String, Object>>中每个字段不为空的数量。具体实现可以参考以下代码:
```
List<Map<String, Object>> list = new ArrayList<>();
// 添加数据到list中
Map<String, Long> countMap = list.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> entry.getValue() != null)
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collectors.counting()
));
System.out.println(countMap);
```
首先,使用stream()方法将List转换为Stream对象。然后使用flatMap()方法将每个Map对象中的键值对转换为一个Stream对象,方便后续操作。接着使用filter()方法过滤掉值为null的键值对。最后使用groupingBy()方法将键值对按键分组,然后使用counting()方法统计每个键值对的数量。最终得到的是一个Map对象,键为每个字段名,值为该字段不为空的数量。
相关问题
List<Map<String, Object>>取出一个字段的值list
要取出List<Map<String, Object>>中的一个字段的值list,可以按照以下步骤进行操作:
1. 首先,创建一个空的List<String>,用于存储要取出的字段值。
2. 遍历List<Map<String, Object>>中的每个Map元素。
3. 对于每个Map元素,使用get方法根据字段名获取对应的值,并将其转换为String类型。
4. 将获取到的字段值添加到步骤1中创建的List<String>中。
5. 完成遍历后,即可得到包含所有字段值的List<String>。
以下是一个示例代码,展示了如何实现上述步骤:
```java
List<Map<String,
#### 引用[.reference_title]
- *1* *2* [Java List<Map<String,Object>>赋值给另外一个List<Map<String,String>> 利用类型擦除进行数据复制](https://blog.csdn.net/huqiankunlol/article/details/124608555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [List<map>多字段组合排序](https://download.csdn.net/download/jiazhj/10957135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
java 中 List<Map<String, Object>> 进行多字段排序
在Java中,可以使用Comparator工具类对List<Map<String, Object>>进行多字段排序。下面是一个简单的示例代码:
```java
import java.util.*;
public class MultiFieldSort {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
// 添加示例数据
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "John");
map1.put("age", 25);
map1.put("score", 80);
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Alice");
map2.put("age", 30);
map2.put("score", 90);
list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("name", "Bob");
map3.put("age", 20);
map3.put("score", 85);
list.add(map3);
// 按照name字段升序,age字段降序进行排序
list.sort(Comparator.comparing((Map<String, Object> m) -> (String) m.get("name"))
.thenComparing(Comparator.comparingInt((Map<String, Object> m) -> (int) m.get("age")).reversed()));
// 输出排序结果
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
}
```
这段代码演示了如何对List<Map<String, Object>>进行多字段排序。首先,我们创建了一个包含多个Map的List,并添加了示例数据。然后,使用Comparator.comparing方法指定要排序的字段,并使用thenComparing方法指定多个字段的排序顺序。在示例中,我们按照name字段进行升序排序,如果name字段相同,则按照age字段进行降序排序。最后,使用List的sort方法对List进行排序,并输出排序结果。