Java中包含epoch的对象的排序数组列表

vojdkbi0  于 2023-01-16  发布在  Java
关注(0)|答案(4)|浏览(143)

我有一个对象的数组列表,比如arrlist =[obj1, obj2,obj3],其中每个对象包含epochs和一个整数,也就是obj_i = {"1493275005401", 2} for all i。我想根据时间点对数组列表排序。作为一个java初学者,我不知道怎么做。
注:我在谷歌上搜索了一下,找到了Collections.sort(),但我不知道如何告诉sort在对象的特定字段上排序。
任何帮助都很感激。
编辑:如果我把epoch(TIME)看作string而不是time.,那么排序后的输出会改变吗?

ccgok5k5

ccgok5k51#

您可以将Collections.sort与比较器一起使用,假设您有以下代码:

List<Item> arrlist = Arrays.asList(new Item("1493275005401", 2), new Item("14932", 5), 
    new Item("778888", 1));

如果要使用第一个项目(字符串)进行排序,可以使用:

Collections.sort(arrlist, (o1, o2) -> {
    return o1.getName().compareTo(o2.getName());
});

如果要使用第二个项目(即和int)进行排序,可以使用:

Collections.sort(arrlist, (o1, o2) -> {
    return o1.getId() - o2.getId();
});

注意:您也可以对多个项目的列表进行排序。

    • 编辑**

因为epoch是一个整数,你可以把它转换成BigInteger并比较你的日期:

Collections.sort(arrlist, (o1, o2) -> {
    return new BigInteger(o1.getName()).compareTo(new BigInteger(o2.getName()));
});
wvt8vs2t

wvt8vs2t2#

你可以使用Collections.sort(List<T>, Comparator<T>)来完成这个任务,你只需要指定一个Comparator来使用你的数据类型的epoch组件。
让我们假设你的类型看起来像这样(epoch看起来像一个String):

class Container {
  String epoch;
  Integer i;
  Container(String e, Integer ii){
    epoch = e;
    i = ii;
  }
}

然后,您可以创建一个比较器,用于比较epoch String的数字(!)值:

class ContComparator implements Comparator<Container> {
  @Override
  public int compare(Container o1, Container o2) {
    final Long epoch2 = Long.valueOf(o2.epoch);
    final Long epoch1 = Long.valueOf(o1.epoch);
    return epoch1.compareTo(epoch2);
  }
}

并像这样使用它:

List<Container> arrlist = ... ;
Collections.sort(arrlist, new ContComparator());
uttx8gqw

uttx8gqw3#

尝试比较器:

list.sort(Comparator.comparing(obj -> Long.parseLong(obj.getEpoch())));

这是Java 8引入的较新语法和比较器API。comparing方法将函数作为参数,该参数将从列表中的元素提取相关属性。
如果您阅读了Comparator的comparing方法的JavaDoc,您将找到有关如何进一步修改排序的更多信息。
为了更好地了解正在发生的事情:

list.sort(new Comparator<MyObject>() {
    public int compare(MyObject o1, MyObject o2) {
        return Long.parseLong(o1.getEpoch().toMillis()) - Long.parseLong(o2.getEpoch().toMillis());
    }
})
kse8i1jr

kse8i1jr4#

对于按历元时间排序,我们可以这样做anyList.sort(Comparator.comparing(o.getEpoch()))

相关问题