当前位置: 首页 > 知识库问答 >
问题:

在省道中排列arraylist中的相同自定义对象

时才俊
2023-03-14

我有一个自定义对象数组,如下所示:-

"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,那么它们应该存储在另一个列表中。

请让我知道如何实现这一点。

共有1个答案

况鸿雪
2023-03-14

我不知道这类操作调用的是什么,所以我最终调用了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,就像: 我需要如何修改此适配器以使其与其他适配器一起工作? 谢谢你的帮助。