问题
使用groupBy插件的组列表对象,如何实现
这是输入
List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];
希望此输出低于
[
{
"date": "1969-07-20 20:18:04Z",
"message": [
{
"title": "msg1",
"message": "hi all",
"date": "1969-07-20 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-20 20:18:04Z"
}
]
},
{
"date": "1969-07-21 20:18:04Z",
"message": [
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-21 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-21 20:18:04Z"
}
]
},
{
"date": "1969-07-22 20:18:04Z",
"message": [
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-22 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-22 20:18:04Z"
}
]
}
]
使用collection插件中的groupBy方法,它会经过一段时间,将List转换为其他列表的原生dart方法是什么
final struct = <String, dynamic>{
{ "product": [ { "name": "cake", "message": "Message1", "time":"2020-06-16" }, { "name": "apple", "message": "Message2", "time": "2020-06-16" }, { "name": "fish", "message": "Message4", "time": "2020-06-15" }, { "name": "toy", "message": "Message5", "time": "2020-06-15" }
] }
};
并添加您需要的
struct["time"] = "2020-06-16";
按照以下步骤操作。
List dataList=[];
var data={ "product": [ { "name": "cake", "message": "Message1", "time":"2020-06-16" }, { "name": "apple", "message": "Message2", "time": "2020-06-16" }, { "name": "fish", "message": "Message4", "time": "2020-06-15" }, { "name": "toy", "message": "Message5", "time": "2020-06-15" }
] };
在init调用中,
dataList.add(data);
打印结果:
[ { "time": "2020-06-16", "product": [ { "name": "cake", "message": "Message1" }, { "name": "apple", "message": "Message2" } ] }, { "time": "2020-06-15", "product": [ { "name": "fish", "message": "Message4' }, { "name": "toy", "message": "Message5" } ]
} ]
请检查此答案,尝试在镖垫中运行
void main() {
List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];
List<dynamic> convertedData = [];
for (int i = 0; i < data.length; i++) {
if (i == 0) {
convertedData.add({
"date": data[i]["date"],
"message": [data[i]]
});
} else {
bool found = false;
for (int j = 0; j < convertedData.length; j++) {
if (convertedData[j]["date"] == data[i]["date"]) {
convertedData[j]["message"].add(data[i]);
found = true;
break;
}
}
if (!found) {
convertedData.add({
"date": data[i]["date"],
"message": [data[i]]
});
}
}
}
print(convertedData);
}
或使用集合插件
import "package:collection/collection.dart";
main(List<String> args) {
List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];
var output = groupBy(data,(element) => element["date"])
.map((key, value) => MapEntry(
key,
{"date": key, "message": value.toList()},
));
print(output.values.toList());
}