flutter 如何按ISO8601对对象列表进行排序

pod7payv  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(211)

我有一个对象列表,在循环后,我尝试按给定的ISO 8601格式favouriteDateTime对最终列表进行排序:2022-12- 16 T10:46:55.551Z.有多种排序方法,但使用哪一种以及如何排序。

List<Movies> get Movies{
List<Movies> favMoviesList = <Movies>[];
for (final category in _appData.categories) {
  for (final series in category.series!) {
    final favMovies = series.movie!
        .where((movie) =>
            movie.stats != null && movie.stats!.isFavourite == true)
        .toList();

    if (favMovies.length > 0) {
     
    List<Movies> sorted = favMovies
       ..sort((a, b) => b.stats!.favoriteDateTime!
            .compareTo(a.stats!.favoriteDateTime!));
      favMoviesList.addAll(sorted);
    }}}

return favMoviesList;
}
rmbxnbpk

rmbxnbpk1#

ISO 8601时间戳可以通过字符串比较来排序-对于两个ISO字符串ab,如果时间a在时间b之后,则a > b总是为真,反之亦然。
至于实际的排序方法,这里使用sort()是正确的,只要确保只有一个句点--favMovies.sort(),而不是favMovies..sort()
另外,List.sort()不返回排序后的列表,它在适当的位置对列表进行排序,所以排序代码应该是:

favMovies.sort((a, b) => 
  b.stats!.favoriteDateTime!.compareTo(a.stats!.favoriteDateTime!)
);
favMoviesList.addAll(favMovies);

相关问题