采用jdk8的方式,dailyOnlineDuration是String类型的,属于PlayerOnlineRewardActivityData的一个字段, Map<Integer, List<PlayerOnlineRewardActivityData>>要统计dailyOnlineDuration总和并转成BigInteger
时间: 2025-03-17 08:10:06 浏览: 26
### 统计 `Map<Integer, List<PlayerOnlineRewardActivityData>>` 中的 `dailyOnlineDuration` 字段
以下是实现该功能的方法,利用 Java 8 的 Stream API 来完成对嵌套结构的数据处理:
#### 实现代码
```java
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
public class PlayerOnlineRewardCalculator {
public static void main(String[] args) {
// 假设输入是一个 Map<Integer, List<PlayerOnlineRewardActivityData>>
Map<Integer, List<PlayerOnlineRewardActivityData>> playerData = ...;
// 使用 Stream API 进行计算
BigInteger totalDailyOnlineDuration = playerData.values().stream()
.flatMap(List::stream) // 将内部列表展平为单一流
.map(data -> new BigInteger(data.getDailyOnlineDuration())) // 转换 dailyOnlineDuration 为 BigInteger
.reduce(BigInteger.ZERO, BigInteger::add); // 求和操作
System.out.println("Total Daily Online Duration: " + totalDailyOnlineDuration);
}
}
```
#### 解析过程
上述代码实现了以下逻辑:
1. 首先获取 `playerData` 的值部分(即所有的 `List<PlayerOnlineRewardActivityData>`),并通过 `.values()` 方法提取出来[^1]。
2. 利用 `.stream()` 创建流,并调用 `.flatMap(List::stream)` 展开所有子列表中的元素到单一的流中[^4]。
3. 对于每一个展开后的 `PlayerOnlineRewardActivityData` 对象,调用其方法 `getDailyOnlineDuration()` 获取字符串类型的字段值,并通过 `new BigInteger(...)` 将其转换为数值类型[^3]。
4. 最终使用 `.reduce(BigInteger.ZERO, BigInteger::add)` 完成累加操作,得到总的在线时长。
此方法能够高效地处理复杂的嵌套数据结构,并充分利用了 Java 8 提供的强大流式编程能力。
---
阅读全文
相关推荐
















