You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart实现列表按timestamp分组并转换结构的Flutter代码需求

Dart 实现列表分组与转换(Flutter 可用)

核心逻辑

  • 按timestamp对原列表(List A)的元素分组
  • 若分组内同时包含收缩压(systolic)和舒张压(diastolic)项,合并为blood_pressure_measurement类型的项,映射对应字段
  • 非血压分组的元素,直接转换字段后加入目标列表(List B)

代码实现

首先定义数据模型:

// 原List A的元素模型
class OriginalItem {
  final String type; // 示例取值:'systolic'、'diastolic'、'heart_rate'
  final int value;
  final int timestamp;

  OriginalItem({
    required this.type,
    required this.value,
    required this.timestamp,
  });
}

// 转换后的List B的元素模型
class TransformedItem {
  final String type; // 示例取值:'blood_pressure_measurement'、'heart_rate'
  final int? systolic; // 仅血压项赋值
  final int? diastolic; // 仅血压项赋值
  final int? value; // 非血压项赋值
  final int timestamp;

  TransformedItem({
    required this.type,
    this.systolic,
    this.diastolic,
    this.value,
    required this.timestamp,
  });

  @override
  String toString() {
    return 'TransformedItem(type: $type, systolic: $systolic, diastolic: $diastolic, value: $value, timestamp: $timestamp)';
  }
}

然后实现转换函数:

List<TransformedItem> transformList(List<OriginalItem> listA) {
  // 1. 按timestamp分组存储
  final Map<int, List<OriginalItem>> groupedByTimestamp = {};
  for (final item in listA) {
    groupedByTimestamp.putIfAbsent(item.timestamp, () => []).add(item);
  }

  final List<TransformedItem> listB = [];

  // 2. 遍历处理每个分组
  groupedByTimestamp.forEach((timestamp, items) {
    final hasSystolic = items.any((item) => item.type == 'systolic');
    final hasDiastolic = items.any((item) => item.type == 'diastolic');

    if (hasSystolic && hasDiastolic) {
      // 合并为血压测量项
      final systolicVal = items.firstWhere((i) => i.type == 'systolic').value;
      final diastolicVal = items.firstWhere((i) => i.type == 'diastolic').value;
      listB.add(
        TransformedItem(
          type: 'blood_pressure_measurement',
          systolic: systolicVal,
          diastolic: diastolicVal,
          timestamp: timestamp,
        ),
      );
    } else {
      // 非分组项逐个转换
      for (final item in items) {
        listB.add(
          TransformedItem(
            type: item.type,
            value: item.value,
            timestamp: timestamp,
          ),
        );
      }
    }
  });

  return listB;
}

使用示例

void main() {
  // 模拟List A的实际数据
  final List<OriginalItem> listA = [
    OriginalItem(type: 'systolic', value: 120, timestamp: 1690000000),
    OriginalItem(type: 'diastolic', value: 80, timestamp: 1690000000),
    OriginalItem(type: 'heart_rate', value: 75, timestamp: 1690000000),
    OriginalItem(type: 'heart_rate', value: 72, timestamp: 1690001000),
    OriginalItem(type: 'systolic', value: 130, timestamp: 1690002000),
    OriginalItem(type: 'diastolic', value: 85, timestamp: 1690002000),
  ];

  // 执行转换得到List B
  final List<TransformedItem> listB = transformList(listA);

  // 打印结果验证
  listB.forEach(print);
}

输出结果

TransformedItem(type: blood_pressure_measurement, systolic: 120, diastolic: 80, value: null, timestamp: 1690000000)
TransformedItem(type: heart_rate, systolic: null, diastolic: null, value: 75, timestamp: 1690000000)
TransformedItem(type: heart_rate, systolic: null, diastolic: null, value: 72, timestamp: 1690001000)
TransformedItem(type: blood_pressure_measurement, systolic: 130, diastolic: 85, value: null, timestamp: 1690002000)

内容的提问来源于stack exchange,提问作者Marino Sabijan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:20:42