Stringでcompare
MapなListを複数keyでsortするとき、valueをStringにして結合したものをsortすれば綺麗に並びます。
実装
void main(List<String> args) {
var list = [
{'groupId': 2, 'label': 'ロース'},
{'groupId': 10, 'label': 'レタス'},
{'groupId': 3, 'label': 'レモン'},
{'groupId': 3, 'label': 'もも'},
{'groupId': 10, 'label': 'しいたけ'},
{'groupId': 2, 'label': 'カルビ'},
];
print('sorted list:');
// intが数字順に並ぶよう指定(例:2,3,10)
var pairString =
(e) => "${e['groupId'].toString().padLeft(8, '0')}"
+ "${e['label']}";
list.sort((a, b) => pairString(a).compareTo(pairString(b)));
list.asMap().forEach((key, value) => print("$key: $value"));
}
実行結果
sorted list:
0: {groupId: 2, label: カルビ}
1: {groupId: 2, label: ロース}
2: {groupId: 3, label: もも}
3: {groupId: 3, label: レモン}
4: {groupId: 10, label: しいたけ}
5: {groupId: 10, label: レタス}
以上