我有以下Map对象列表:
[
{
"name": "Sameera Tennakoon",
"userID": "7c770f8d-hju4-4ddd-b5cb-f3d0caba2bb3",
"type": "CASHIER"
},
{
"name": "Sam Perera",
"userID": "7c770f8d-f6f4-3eee-b5cb-f3d0caba2bb3",
"type": "CASHIER"
},
{
"name": "Uma Jackson",
"userID": "7c770f8d-f6f4-4ddd-5634-f3d0caba2bb3",
"type": "CASHIER"
},
{
"name": "Anu Ima",
"userID": "7c770f8d-f6f4-4ddd-lksa-f3d0caba2bb3",
"type": "CASHIER"
},
{
"name": "Sameera Tennakoon",
"userID": "7c770f8d-hju4-4ddd-b5cb-f3d0caba2bb3",
"type": "CASHIER"
}
];
我想从这个列表中删除重复的项目。我该如何在Flutter中做到这一点?
P.S. -.toSet()
和.toList()
方法在这种情况下不起作用。
5条答案
按热度按时间euoag5mw1#
假设您将整个列表存储在List l1=[...]中,使用toSet()删除重复项:
8oomwypt2#
如果只检查相等的
userID
s就足够了,可以这样做:atmip9wb3#
编写一个方法,通过
Set
中特定字段的出现来过滤项目:并使用它:
你可以在这里测试
vnzz0bqm4#
请参阅
HashSet
的文档。HashSet
的元素必须具有一致的equality和hashCode实现,这意味着equals操作必须在元素上定义稳定的等价关系(自反、对称、传递和随时间的一致性),并且hashCode必须与equality保持一致,以便对于被视为相等的对象是相同的。Map
对象不满足上述要求,换句话说,以下代码将打印false
。您可以通过创建一个
Set
来解决这个问题,该Set
使用equals
和hashCode
的自定义行为,如下所示:gpnt7bae5#
在Flutter中不使用集合从Map对象的List中删除重复项的一种方法是迭代List,并且仅当每个Map对象在新List中不存在时,才将其添加到新List中。