Получить наибольшее значение в объекте списка - PullRequest
0 голосов
/ 16 июня 2020

Как получить наибольшее значение в списке объекта? Я хочу сравнить номер дела

print(_abcBloc.vpStream.value);

 _abcBloc.vpStream.value
                .sort((a, b) => a['caseNumber'].compareTo(b['caseNumber']));

 print(_abcBloc.vpStream.value.last['caseNumber']);

Ошибка

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '(dynamic, dynamic) => dynamic' is not a subtype of type '(ABC, ABC) => int' of 'compare'

Это _abcBloc.vpStream.value вывод:

[ABC(priority: null,caseNumber: 1,....), ABC(priority: null, caseNumber:2,...)]

Ответы [ 3 ]

0 голосов
/ 16 июня 2020

Я также хочу добавить, что вам не нужно sort карту, если вы просто хотите найти наибольшее значение. Вместо этого вы можете использовать метод reduce для перебора каждого значения в списке и определения того, какое значение вы хотите сохранить в итерации:

void main() {
  final listOfMaps = [
    {'caseNumber': 1},
    {'caseNumber': 3},
    {'caseNumber': 2}
  ];

  final mapWithBiggestCaseNumber =
      listOfMaps.reduce((a, b) => a['caseNumber'] > b['caseNumber'] ? a : b);

  print(mapWithBiggestCaseNumber); // {caseNumber: 3}
}
0 голосов
/ 16 июня 2020

вы можете использовать математическую библиотеку и уменьшить, чтобы проверить максимальное значение

import 'dart:math';

num biggest = _abcBloc.vpStream.value
     .map((abc) => abc.caseNumber).reduce(max);
0 голосов
/ 16 июня 2020

Как упоминалось в комментариях, просто напишите тип параметров в лямбда как (ABC a, ABC b), чтобы сообщить компилятору Dart о типах лямбда. Без типов компилятор Dart предполагает, что они dynamic, что вызывает проблему, с которой вы сталкиваетесь.

Изменить: как отмечали другие ответы, вы не должны использовать вызов sort, поскольку он меньше эффективнее (O (nlogn)), чем должно быть (O (n)). Таким образом, хотя то, что я сказал, работает, было бы лучше использовать вызов reduce.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...