java list<map> poidatas.stream().filter
时间: 2023-11-05 20:38:22 浏览: 29
This code snippet is incomplete and does not provide enough context to provide an accurate answer. Please provide the complete code or a more detailed description of the problem.
相关问题
java list<map> lambda 查询
假设我们有一个List<Map<String, Object>>,其中每个Map包含以下键值对:
- "name":String类型,表示人名
- "age":Integer类型,表示年龄
- "gender":String类型,表示性别
我们可以使用Lambda表达式来查询这个List中的Map对象。假设我们要查询年龄大于等于18岁且性别为女性的人名,可以使用以下代码:
```java
List<Map<String, Object>> list = new ArrayList<>();
// 添加Map对象到list中
List<String> names = list.stream()
.filter(map -> (Integer) map.get("age") >= 18 && map.get("gender").equals("female"))
.map(map -> (String) map.get("name"))
.collect(Collectors.toList());
```
在以上代码中,我们使用了Stream流和Lambda表达式来对List中的Map对象进行查询。首先,我们使用filter()方法过滤出年龄大于等于18岁且性别为女性的Map对象。然后,我们使用map()方法将符合条件的Map对象中的人名提取出来。最后,我们使用collect()方法将人名放入一个新的List中。
代码优化 List<String> allRows = this.getHBaseRows(); if (CollectionUtils.isEmpty(allRows)) { return success("暂无数据"); } // 数据转换 List<PositionInfo> allInfos = allRows.stream() .map(ar -> JSONObject.parseObject(ar, PositionInfo.class)) .filter(ar-> ar.getTimestamp() > DateUtils.addHours(new Date(),-1).getTime()) .collect(Collectors.toList()); // 获取每个用户最近一次的记录 List<PositionInfo> result = new ArrayList<>(allInfos.stream() .collect(Collectors.toMap(PositionInfo::getUserId, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(PositionInfo::getTimestamp)))) .values());
这段代码可以进行以下优化:
1. 使用Optional避免空指针异常
可以使用Optional避免空指针异常,如下:
```
List<String> allRows = this.getHBaseRows();
return Optional.ofNullable(allRows)
.filter(CollectionUtils::isNotEmpty)
.map(rows -> {
// 数据转换
List<PositionInfo> allInfos = rows.stream()
.map(ar -> JSONObject.parseObject(ar, PositionInfo.class))
.filter(ar -> ar.getTimestamp() > DateUtils.addHours(new Date(), -1).getTime())
.collect(Collectors.toList());
// 获取每个用户最近一次的记录
List<PositionInfo> result = new ArrayList<>(allInfos.stream()
.collect(Collectors.toMap(PositionInfo::getUserId, Function.identity(),
BinaryOperator.maxBy(Comparator.comparing(PositionInfo::getTimestamp))))
.values());
return success(result);
})
.orElse(success("暂无数据"));
```
2. 使用Lambda表达式简化代码
可以使用Lambda表达式简化代码,如下:
```
List<String> allRows = this.getHBaseRows();
return Optional.ofNullable(allRows)
.filter(CollectionUtils::isNotEmpty)
.map(rows -> rows.stream()
.map(ar -> JSONObject.parseObject(ar, PositionInfo.class))
.filter(ar -> ar.getTimestamp() > DateUtils.addHours(new Date(), -1).getTime())
.collect(Collectors.groupingBy(PositionInfo::getUserId,
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(PositionInfo::getTimestamp)),
Optional::get)))
.values())
.map(ArrayList::new)
.map(this::success)
.orElse(success("暂无数据"));
```
这段代码使用了groupingBy方法将数据按照userId分组,然后使用collectingAndThen方法将每组数据取最大的timestamp,最后使用values方法获取所有分组的结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)