我有一个像arrlist =[obj1, obj2,obj3]
这样的对象的arraylist,其中每个对象包含epochs
和一个整数,即obj_i = {"1493275005401", 2} for all i
。我想在时代的基础上对arraylist进行排序。作为java的初学者,我不知道该怎么做。
注意:我做了一些谷歌搜索,提出Collections.sort()
,但我不知道如何判断排序对对象的特定字段进行排序。
感谢任何帮助。
编辑:如果我将epoch
(TIME)视为string
而不是time.
,是否会更改已排序的输出?
答案 0 :(得分:2)
您可以将Collections.sort
与比较器一起使用,请考虑您:
List<Item> arrlist = Arrays.asList(new Item("1493275005401", 2), new Item("14932", 5),
new Item("778888", 1));
如果您想使用第一个可以使用String的项目进行排序:
Collections.sort(arrlist, (o1, o2) -> {
return o1.getName().compareTo(o2.getName());
});
如果你想使用第二个项目进行排序,那么你可以使用:和
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()));
});
答案 1 :(得分:1)
您可以使用Collections.sort(List<T>, Comparator<T>)
执行此操作。您只需指定使用数据类型的Comparator
组件的epoch
。
让我们假设你的类型看起来像这样(epoch似乎是一个字符串):
class Container {
String epoch;
Integer i;
Container(String e, Integer ii){
epoch = e;
i = ii;
}
}
然后你可以创建一个比较纪元字符串的数字(!)值的比较器:
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());
答案 2 :(得分:0)
尝试比较器:
list.sort(Comparator.comparing(obj -> Long.parseLong(obj.getEpoch())));
这是Java 8引入的较新语法和Comparator 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());
}
})