如何获得对象列表中的最大值?我要比较一下箱子号码
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,...)]
发布于 2020-06-16 04:09:00
正如注释中提到的,只需将lambda中的参数类型写为(ABC a, ABC b)
,就可以告诉Dart编译器有关lambda的类型。如果没有这些类型,Dart编译器就假设它们是dynamic
,这就引发了您所面临的问题。
编辑:正如其他答案所指出的,您不应该使用sort
调用,因为它的效率(O(nlogn))低于所需的效率(O(n))。因此,虽然我说的是有效的,但最好是使用减少调用。
发布于 2020-06-16 04:54:55
我还想补充一点,如果你只想找到最大的价值,你不需要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}
}
发布于 2020-06-16 04:57:19
您可以使用数学库和约简来检查最大值。
import 'dart:math';
num biggest = _abcBloc.vpStream.value
.map((abc) => abc.caseNumber).reduce(max);
https://stackoverflow.com/questions/62400600
复制相似问题