List<Map<String,Object>>一旦map中一个字段为指定值则停止流否则继续求 另一个字段的和,使用stream
时间: 2023-11-11 21:27:12 浏览: 41
可以使用 `Stream.anyMatch` 方法判断列表中是否存在指定字段为指定值的 map,如果存在则直接返回 0,否则继续使用流求和。具体实现代码如下:
```java
List<Map<String, Object>> list = ... // 列表数据
int sum = list.stream()
.peek(map -> {
if ("指定值".equals(map.get("fieldName"))) {
throw new RuntimeException("存在指定字段为指定值的 map");
}
})
.filter(map -> map.get("otherField") != null)
.mapToInt(map -> Integer.parseInt(map.get("otherField").toString()))
.sum();
return sum;
```
上述代码中,使用 `peek` 方法在流中的每一个 map 中进行判断,如果指定字段为指定值,则抛出异常,停止流的处理。在下一个操作中使用 `filter` 方法过滤另一个字段为空的 map,然后使用 `mapToInt` 方法将另一个字段转换为一个 IntStream,最后使用 `sum` 方法求和。
相关问题
List<Map<String,Object>>一旦map中一个字段为是则返回0 否则返回 另一个字段的和
好的,可以按照以下步骤实现:
1. 初始化变量 "has_flag" 为 false,变量 "sum" 为 0。
2. 遍历列表中的每一个 map,对于每一个 map,进行以下操作:
a. 如果该 map 中标识字段为是,则将变量 "has_flag" 设置为 true,并结束遍历。
b. 否则,将该 map 中的积分字段累加到变量 "sum" 中。
3. 如果变量 "has_flag" 为 true,则将变量 "sum" 设置为 0。
4. 返回变量 "sum"。
具体实现代码如下:
```java
List<Map<String, Object>> list = ... // 列表数据
int sum = 0;
boolean hasFlag = false;
for (Map<String, Object> map : list) {
Object flag = map.get("flag");
if (flag != null && flag.toString().equals("是")) {
hasFlag = true;
break;
} else {
Object score = map.get("score");
if (score != null) {
sum += Integer.parseInt(score.toString());
}
}
}
if (hasFlag) {
sum = 0;
}
return sum;
```
上述代码中,假设列表中的每一个 map 都包含了 "flag" 和 "score" 两个字段,其中 "flag" 用于判断是否有标识,"score" 用于获取积分字段的值。在遍历列表的过程中,如果发现有标识字段为是,则将变量 "hasFlag" 设置为 true,并结束遍历。否则,将该 map 中的积分字段累加到变量 "sum" 中。最后,如果变量 "hasFlag" 为 true,则将变量 "sum" 设置为 0,最终返回变量 "sum"。
List<Map<String,Object>>一旦map中一个字段为是则返回0 否则返回 另一个字段的和,使用stream
好的,使用 stream 实现可以按照以下步骤:
1. 使用 `anyMatch` 方法判断列表中是否存在标识字段为是的 map。
2. 如果存在,返回 0;否则,使用 `mapToInt` 方法将积分字段转换为一个 IntStream。
3. 使用 `filter` 方法过滤积分字段为空的 map。
4. 使用 `mapToInt` 方法将积分字段转换为一个 IntStream。
5. 使用 `sum` 方法求和。
具体实现代码如下:
```java
List<Map<String, Object>> list = ... // 列表数据
int sum = list.stream()
.anyMatch(map -> "是".equals(map.get("flag")))
? 0
: list.stream()
.filter(map -> map.get("score") != null)
.mapToInt(map -> Integer.parseInt(map.get("score").toString()))
.sum();
return sum;
```
上述代码中,首先使用 `anyMatch` 方法判断列表中是否存在标识字段为是的 map。如果存在,则直接返回 0;否则,使用 `mapToInt` 方法将积分字段转换为一个 IntStream,然后使用 `filter` 方法过滤积分字段为空的 map,再使用 `mapToInt` 方法将积分字段转换为一个 IntStream,最后使用 `sum` 方法求和。
阅读全文