list<map> 使用stream过滤其中一个字段为空的数据
时间: 2023-06-14 14:03:22 浏览: 150
假设你要过滤的字段名为"fieldName",可以使用Stream的filter和map方法来实现:
```
List<Map<String, Object>> list = new ArrayList<>();
// 假设 list 已经被初始化
List<Map<String, Object>> filteredList = list.stream()
.filter(map -> map.get("fieldName") != null && !map.get("fieldName").toString().isEmpty())
.collect(Collectors.toList());
```
上述代码中,我们首先使用`stream()`方法将 list 转换成 Stream,然后使用`filter()`方法过滤出满足条件的元素,最后使用`collect()`方法将过滤后的元素收集到一个新的 List 中。在过滤时,我们使用了 Java 8 新增的 Lambda 表达式和 Stream API。其中,`!map.get("fieldName").toString().isEmpty()`用于判断字段是否为空。
相关问题
java list<map> stream流 按多个字段分组
可以使用Java 8中的Stream API,使用Collectors.groupingBy()方法按照多个字段进行分组。例如,假设我们有一个List<Map<String, Object>>,其中每个Map都包含两个字段:name和age。我们想按照这两个字段进行分组,可以使用以下代码:
List<Map<String, Object>> list = new ArrayList<>();
// 假设list中有多个Map对象,每个Map对象都包含name和age两个字段
Map<String, Map<Integer, List<Map<String, Object>>>> result = list.stream()
.collect(Collectors.groupingBy(
m -> m.get("name").toString(),
Collectors.groupingBy(
m -> Integer.parseInt(m.get("age").toString())
)
));
这将返回一个Map对象,其中键是name字段的值,值是另一个Map对象,其中键是age字段的值,值是具有相同name和age值的Map对象的列表。
Java中通过stream流将两个List<Map>通过相同某字段合并成一个List<Map>其他的值相加
可以使用Java 8中的Stream API来实现。假设要合并的两个List<Map>分别为list1和list2,合并的字段为"field",其他的值需要相加。代码如下:
```java
List<Map<String, Object>> result = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.groupingBy(map -> map.get("field")))
.entrySet().stream()
.map(entry -> {
Map<String, Object> map = new HashMap<>();
map.put("field", entry.getKey());
map.put("value", entry.getValue().stream()
.mapToInt(map -> (int) map.getOrDefault("value", 0))
.sum());
return map;
})
.collect(Collectors.toList());
```
这段代码首先使用Stream.concat()将两个List合并为一个Stream,然后使用Collectors.groupingBy()方法按照"field"字段进行分组,得到一个Map<String, List<Map<String, Object>>>类型的结果。接着使用entrySet()方法将Map转化为Set,然后再次使用Stream流处理每个分组,将"field"字段和其他字段的值相加,最后使用Collectors.toList()方法将结果转化为List<Map<String, Object>>类型。
阅读全文