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

如何按ISO8601格式的favoriteDateTime对Movies对象列表排序?

问题分析与解决方案

现有代码的问题

你当前的代码是对每个series下的收藏电影单独排序后再合并到总列表,最终总列表只是各series内部的电影按favoriteDateTime降序排列,但整个总列表并非全局统一排序——如果不同series的电影收藏时间有交叉,最终结果的顺序会不符合预期。

推荐的排序方式

正确的做法是:先一次性收集所有符合条件的收藏电影,再对整个列表进行一次全局排序。这样能保证最终列表里的所有电影都严格按照favoriteDateTime统一排序。

优化后的代码实现

List<Movies> get movies {
  // 先收集所有符合条件的收藏电影
  final favMoviesList = <Movies>[];
  for (final category in _appData.categories) {
    for (final series in category.series ?? []) { // 用?? []避免空指针异常
      final favMovies = series.movie?.where((movie) {
            // 空安全的条件判断,确保必要字段非空
            return movie.stats != null && 
                   movie.stats!.isFavourite == true && 
                   movie.stats!.favoriteDateTime != null;
          }).toList() ?? [];
      favMoviesList.addAll(favMovies);
    }
  }
  
  // 对整个列表全局排序,按favoriteDateTime降序(最新收藏的电影排在前面)
  favMoviesList.sort((a, b) {
    return b.stats!.favoriteDateTime!.compareTo(a.stats!.favoriteDateTime!);
  });
  
  return favMoviesList;
}

额外说明

  • 如果需要升序排列(最早收藏的电影在前),只需把排序逻辑改为a.stats!.favoriteDateTime!.compareTo(b.stats!.favoriteDateTime!)即可。
  • 代码中优化了空安全处理,用?? []替代强制解包!,避免因series或movie为空导致崩溃;同时在过滤条件中确保favoriteDateTime非空,让排序操作更安全。

内容的提问来源于stack exchange,提问作者Digamber negi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:25:14