php foreach 里面某个字段求和并输出

本文介绍了一种在PHP中快速计算数组元素总和的方法,使用echoarray_sum(array_column)函数组合,有效地对数组中特定列的数值进行求和。

echo array_sum(array_column($your_array, 'money'));

### 使用 Java 新特性对 `List<Map>` 中的字段进行求和 在 Java 8 及更高版本中,`Stream API` 提供了强大的功能来处理集合数据。对于 `List<Map>` 类型的数据结构,可以通过 `Stream API` 和 `Collectors` 的组合实现字段求和操作。 以下是一个完整的示例代码,展示如何使用 `Stream API` 和 `reduce` 方法对 `List<Map>` 中的某个字段进行求和: ```java import java.util.*; import java.util.stream.Collectors; public class ListMapSumExample { public static void main(String[] args) { // 初始化示例数据 List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("id", 1); map1.put("value", 10L); list.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("id", 2); map2.put("value", 20L); list.add(map2); Map<String, Object> map3 = new HashMap<>(); map3.put("id", 3); map3.put("value", 30L); list.add(map3); // 使用 Stream API 对 "value" 字段进行求和 Long sum = list.stream() .filter(map -> map.containsKey("value")) // 确保 Map 包含 "value" 键 .map(map -> (Long) map.get("value")) // 将 "value" 转换为 Long 类型 .reduce(0L, Long::sum); // 使用 reduce 方法进行求和 System.out.println("Sum of values: " + sum); // 输出求和结果 } } ``` #### 代码解析 - **初始化数据**:创建了一个包含多个 `Map<String, Object>` 的列表,每个 `Map` 中包含 `"id"` 和 `"value"` 键。 - **Stream API 处理**: - 使用 `filter` 方法确保每个 `Map` 都包含 `"value"` 键[^1]。 - 使用 `map` 方法将 `"value"` 键对应的值提取出来,将其转换为 `Long` 类型[^3]。 - 使用 `reduce` 方法对提取出的值进行求和操作[^4]。 - **输出结果**:打印最终的求和结果。 #### 结果输出 对于上述代码,输出结果如下: ```text Sum of values: 60 ``` #### 关键点说明 - **`filter` 方法**:用于过滤掉不包含目标字段的 `Map`,避免出现空指针异常。 - **`map` 方法**:用于将目标字段的值提取出来,转换为目标类型(如 `Long`)。 - **`reduce` 方法**:用于将流中的元素进行累积计算,生成一个单一的结果。 ### 使用 `Collectors` 实现分组求和 如果需要对 `List<Map>` 中的数据按某个字段分组对其它字段进行求和,可以使用 `Collectors.groupingBy` 和 `Collectors.reducing` 的组合。以下是一个示例代码: ```java import java.util.*; import java.util.stream.Collectors; public class GroupAndSumExample { public static void main(String[] args) { // 初始化示例数据 List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("category", "A"); map1.put("value", 10L); list.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("category", "B"); map2.put("value", 20L); list.add(map2); Map<String, Object> map3 = new HashMap<>(); map3.put("category", "A"); map3.put("value", 30L); list.add(map3); // 使用 Stream API 对 "value" 字段按 "category" 分组求和 Map<String, Long> result = list.stream() .collect(Collectors.groupingBy( map -> (String) map.get("category"), // 按 "category" 分组 Collectors.reducing(0L, // 初始值 map -> (Long) map.get("value"), // 提取 "value" Long::sum) // 求和 )); // 输出结果 result.forEach((key, value) -> System.out.println(key + ": " + value)); } } ``` #### 代码解析 - **分组逻辑**:使用 `Collectors.groupingBy` 方法按 `"category"` 字段对数据进行分组。 - **求和逻辑**:使用 `Collectors.reducing` 方法对每个分组内的 `"value"` 字段进行求和[^4]。 - **输出结果**:遍历分组后的结果打印。 #### 结果输出 对于上述代码,输出结果如下: ```text A: 40 B: 20 ``` ### 总结 通过 `Stream API` 和 `Collectors` 的组合,可以高效地对 `List<Map>` 类型的数据进行字段求和操作。无论是简单的全局求和还是复杂的分组求和,都可以通过灵活的流式操作实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值