按日期对 ArrayList 中的对象进行排序?

2023-12-20

我找到的每个示例都是按字母顺序执行此操作,而我需要按日期对元素进行排序。

我的 ArrayList 包含其中一个数据成员是 DateTime 对象的对象。在 DateTime 上我可以调用函数:

lt() // less-than
lteq() // less-than-or-equal-to

所以为了比较我可以这样做:

if(myList.get(i).lt(myList.get(j))){
    // ...
}

我应该在 if 块内做什么?


您可以使您的对象具有可比性:

public static class MyObject implements Comparable<MyObject> {

  private Date dateTime;

  public Date getDateTime() {
    return dateTime;
  }

  public void setDateTime(Date datetime) {
    this.dateTime = datetime;
  }

  @Override
  public int compareTo(MyObject o) {
    return getDateTime().compareTo(o.getDateTime());
  }
}

然后你通过调用对其进行排序:

Collections.sort(myList);

然而,有时您不想更改模型,例如当您想对多个不同的属性进行排序时。在这种情况下,您可以动态创建比较器:

Collections.sort(myList, new Comparator<MyObject>() {
  public int compare(MyObject o1, MyObject o2) {
      return o1.getDateTime().compareTo(o2.getDateTime());
  }
});

但是,仅当您确定比较时 dateTime 不为 null 时,上述方法才有效。明智的做法是处理 null 以避免 NullPointerExceptions:

public static class MyObject implements Comparable<MyObject> {

  private Date dateTime;

  public Date getDateTime() {
    return dateTime;
  }

  public void setDateTime(Date datetime) {
    this.dateTime = datetime;
  }

  @Override
  public int compareTo(MyObject o) {
    if (getDateTime() == null || o.getDateTime() == null)
      return 0;
    return getDateTime().compareTo(o.getDateTime());
  }
}

或者在第二个例子中:

Collections.sort(myList, new Comparator<MyObject>() {
  public int compare(MyObject o1, MyObject o2) {
      if (o1.getDateTime() == null || o2.getDateTime() == null)
        return 0;
      return o1.getDateTime().compareTo(o2.getDateTime());
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按日期对 ArrayList 中的对象进行排序? 的相关文章

随机推荐

  • @SQL 每堂课一次

    我正在使用 spring 框架编写一些集成测试 我对不同的集成测试类有不同的 SQL 脚本 像这样的事情 ContextConfiguration classes Sql classpath sportCenter test sql pub
  • Android Nougat:TextureView 不支持显示背景可绘制对象

    我一直在我的Android应用程序中使用TextureView 并且它工作得很好 最近 我在使用 Android API 25 7 1 2 的 Android 设备上测试了我的代码 相同的代码现在不起作用并抛出错误 java lang Un
  • 使用 Asp.Net Core 强制区域设置

    我在使用 Asp Net Core 1 1 和完整的 Net Framework v4 6 2 编写的 Web 应用程序时遇到一些奇怪的问题 我想强制应用程序使用瑞典语言环境 sv SE 这在开发计算机上运行得很好 当然 但在它应该运行的服
  • 如何使用未知 CA 自签名的证书让 Android Volley 执行 HTTPS 请求?

    在提出问题之前 我找到了一些链接 我逐一检查了这些链接 但没有一个链接给我提供了解决方案 知名CA 使用 Volley 的 HTTPS 请求 https stackoverflow com questions 21555404 https
  • Testflight 上出现无效的 IPA 错误:embedded.mobileprovision 中的 APS 环境与二进制文件不匹配

    我很抱歉发布了这么多问题 但是让这个工作变得非常痛苦 尽管 Testflight 让它变得更容易 Invalid IPA error The APS environment in your embedded mobileprovision
  • 从位于 boot2docker 虚拟机内的 Docker 容器作为本地主机访问主机

    假设我有一台服务器在 OSX 上的端口 8000 上运行 我的 Docker 容器如何通过以下方式访问它localhost 8000 我也无法更改主机名 因为容器中的应用程序不在我的控制范围内 我读过之前关于使用的讨论 net host 用
  • 基于模型类型的 ember 组件

    我知道这有点重复 但我创建动态组件渲染器的所有努力都失败了 可能是由于我缺乏对 ember 概念的了解 我的场景是一个多用途搜索栏 它将搜索缓存中的模型 我希望根据模型的类型键在搜索输入下方呈现每个搜索结果 车把文件将根据模型类型和语法命名
  • 字符串到二进制文件

    我的问题是这样的 我有一个名为 Register 的课程 它有一个名为 trainName 的字符串属性及其设置器 class Register private string trainName public string getTrain
  • Excel 多行条件格式

    我试图突出显示超出预期值范围 仅较高或较低 的单元格 每行对应一个不同的行 该行有两个带有最大值和最小值的单元格 有没有办法让 Excel 计算出来 例如 第 7 行的单元格仅当其值超出 B31 的最小值或 B32 的最大值时才应突出显示
  • 角度异步事件的问题

    我的代码循环遍历数组中的 10 个项目 对每个项目发出请求 然后将返回的数据推送到数组中 一切都运行良好 直到 q all line details getDetails function idSet pageNum var page id
  • python 2.7小写

    当我使用 lower 在Python 2 7中 字符串不会将字母转换为小写 我从字典中读取数据 我尝试使用str tt code lower tt code lower 有什么建议 使用 unicode 字符串 drostie signy
  • 如何通过 Python 使用 GeckoDriver 和 Selenium 启动使用默认 Firefox 到 68.9.0esr 的 Tor 浏览器 9.5

    我正在尝试通过以下方式启动 Tor 浏览会话托尔浏览器 9 5它使用默认的火狐浏览器 v68 9 0esr using Gecko驱动程序 https stackoverflow com questions 43660195 why fir
  • 什么时候应该将translatesAutoresizingMaskIntoConstraints设置为true?

    我读过文档 https developer apple com documentation uikit uiview 1622572 translatesautoresizingmaskintoco 但我仍然不确定什么时候不需要将其设置为f
  • 获取SD卡路径

    请在投反对票和 或将其标记为重复之前阅读整篇文章 我正在开发一款应用程序 它可以从用户手机上的特定文件夹中读取文件 从 SD 卡 如果有的话 或从内置存储中读取 是的 清单中提到了 READ EXTERNAL STORAGE 我还在处理 A
  • android(单点触控)绘图应用程序撤消方法无法正常工作

    我正在开发一个绘图应用程序 但面临一些撤消问题 编码如下 public class DoodleView extends View Context context new private static final float TOUCH T
  • 有没有办法使用 ODI 场景重新创建 ODI 包?

    我错误地从我的项目中删除了一个非常大的 ODI 包 如果我之前为同一项目导出过场景 是否可以重新创建相同的包 不幸的是 没有任何方法可以直接从场景中生成已删除的包 您可以将其视为包的编译版本 以下是一些需要检查的事项 以确定您是否可以检索某
  • 该进程无法访问文件“ ”,因为该文件正在被另一个进程使用

    我正在尝试删除使用文件对话框上传的图像文件的本地副本 在计算机上 它抛出进程无法访问文件 C Documents and Settings 用户名 我的文档 我的图片 1220 bmp 因为它正在被另一个进程使用 private void
  • mvc3编辑表单中的下拉菜单

    这可能很简单 但我似乎无法自己解决 我创建了一个简单的数据库和实体模式 如下所示 我正在尝试创建一个创建表单 该表单允许我添加新订单 我总共有 3 个表 所以我想要做的是拥有一个允许用户输入订单日期的表单 并且还有一个下拉列表 允许我从产品
  • R:使用包“rgdal”和“raster”裁剪 GeoTiff 栅格

    我想使用提到的两个包 rgdal 和 raster 裁剪 GeoTiff 光栅文件 一切工作正常 除了生成的输出 tif 的质量非常差并且是灰度而不是彩色 原始数据是来自瑞士联邦地形局的高质量栅格地图 示例文件可以下载here http w
  • 按日期对 ArrayList 中的对象进行排序?

    我找到的每个示例都是按字母顺序执行此操作 而我需要按日期对元素进行排序 我的 ArrayList 包含其中一个数据成员是 DateTime 对象的对象 在 DateTime 上我可以调用函数 lt less than lteq less t