我有一个自定义对象数组,如下所示:-
"trackPointList": [
{
"latitude": 22.038446,
"longitude": 88.085593,
"serialNo": 5,
"timeZone": "IST"
},
{
"latitude": 22.038446,
"longitude": 88.085593,
"serialNo": 6,
"timeZone": "IST"
},
{
"latitude": 22.496401,
"longitude": 88.323892,
"serialNo": 7,
"timeZone": "IST"
},
{
"latitude": 22.496401,
"longitude": 88.323892,
"serialNo": 8,
"timeZone": "IST"
},
{
"latitude": 22.038446,
"longitude": 88.085593,
"serialNo": 9,
"timeZone": "IST"
},
{
"latitude": 22.038446,
"longitude": 88.085593,
"serialNo": 10,
"timeZone": "IST"
}
],
List<TrackPoint> trackingPoints;
除此之外,如果有其他不同的对象,根据它们的lat和long,那么它们应该存储在另一个列表中。
请让我知道如何实现这一点。
我不知道这类操作调用的是什么,所以我最终调用了CollectByCompare
的实现。
下面的实现是List
类的扩展,它允许将列表中与Test
方法相等的项分组,这些项可以作为方法的输入:
class TrackPoint {
final double latitude;
final double longitude;
final int serialNo;
final String timeZone;
const TrackPoint(this.latitude, this.longitude, this.serialNo, this.timeZone);
@override
String toString() =>
'<latitude=$latitude longitude=$longitude serialNo=$serialNo>';
}
void main() {
const trackingPoints = [
TrackPoint(22.038446, 88.085593, 5, "IST"),
TrackPoint(22.038446, 88.085593, 6, "IST"),
TrackPoint(22.496401, 88.323892, 7, "IST"),
TrackPoint(22.496401, 88.323892, 8, "IST"),
TrackPoint(22.038446, 88.085593, 9, "IST"),
TrackPoint(22.038446, 88.085593, 10, "IST")
];
trackingPoints
.collectByCompare((TrackPoint a, TrackPoint b) =>
(a.latitude == b.latitude) && (a.longitude == b.longitude))
.forEach(print);
/* Output:
[<latitude=22.038446 longitude=88.085593 serialNo=5>, <latitude=22.038446 longitude=88.085593 serialNo=6>, <latitude=22.038446 longitude=88.085593 serialNo=9>, <latitude=22.038446 longitude=88.085593 serialNo=10>]
[<latitude=22.496401 longitude=88.323892 serialNo=7>, <latitude=22.496401 longitude=88.323892 serialNo=8>]
*/
}
extension<E> on List<E> {
Iterable<List<E>> collectByCompare(bool Function(E, E) test) sync* {
final handled = <E>[];
for (final a in this.where((e) => !handled.contains(e))) {
final result = this.where((b) => test(a, b)).toList();
yield result;
handled.addAll(result);
}
}
}
我读过关于使用比较器对数组列表进行排序的文章,但在所有示例中,人们都使用了,根据一些研究,这是一种用于字符串的方法。 我希望按照自定义对象的属性之一对其ArrayList进行排序:日期对象()。通常我会通过来比较它们,所以我想知道我是否可以写出如下内容:
问题内容: 如何根据自定义属性排序ArrayList中的对象? 问题答案: 从实现,它就有一个像方法一样的方法。 因此,你的自定义设置应如下所示: 该方法必须返回一个,因此无论如何你都无法直接返回一个你计划中的。 你的排序代码几乎就像你写的那样: 如果你不需要重用比较器,则编写所有这些内容的一种更短的方法是将其编写为内联匿名类: 自从Java-8 现在,你可以通过使用lambda表达式来以较短的形
问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见
我很难从自定义对象的ArrayList中删除重复项。 删除重复项 自定义对象等于() 删除重复项后的输出 关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。
我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索字符串。 因此,我希望有一个函数在我的ArrayList中搜索所有的“name”字符串,例如5个对象。
如何使用Comparator对对象的ArrayList进行正确排序,然后将排序后的数组传递给自定义数组适配器? 我试过这样做: ArrayList的内容类: 比较器: 在OnCreate中设置适配器: ...因为我使用的是定制的ArrayAdapter,就像: 我需要如何修改此适配器以使其与其他适配器一起工作? 谢谢你的帮助。