[英]How do i Sort Objects by Inside Values in Ascending Order Java?
I have list of objects containing data as Name(String) and Timestamp (Long).我有包含名称(字符串)和时间戳(长)等数据的对象列表。 I am trying to sort these objects based on Timestamp in ascending order.
我正在尝试根据时间戳按升序对这些对象进行排序。
MyCode.java MyCode.java
import java.util.ArrayList;
import java.util.Collections;
class Friend
{
long time;
String name;
Friend(long t,String n)
{
time=t;
name=n;
}
}
public class Practice4 {
public static void main(String[] args) {
long l1=1590065750535l;
long l2=1590065760674l;
long l3=1590065784567l;
long l4=1590065760674l;
Friend f[]=new Friend[4];
f[0]=new Friend(l1,"A");
f[1]=new Friend(l3,"B");
f[2]=new Friend(l2,"C");
f[3]=new Friend(l4,"D");
ArrayList<Friend> list=new ArrayList<Friend>();
list.add(f[0]); list.add(f[1]); list.add(f[2]); list.add(f[3]);
Collections.sort(list); //error
System.out.println(list);
}
}
How do i sort these Friend objects by Timestamp and display them?如何按时间戳对这些 Friend 对象进行排序并显示它们?
In order to be sorted with Collections.sort
or Arrays.sort
your class Friend
has to implement Comparable
interface:为了使用
Collections.sort
或Arrays.sort
进行排序,您的 class Friend
必须实现Comparable
接口:
class Friend implements Comparable<Friend>
{
long time;
String name;
Friend(long t,String n)
{
time=t;
name=n;
}
@Override
public int compareTo(Friend f) {
if (time == f.time) {
return name.compareTo(f.name);
}
return time - f.time > 0 ? 1 : -1;
}
@Override
public String toString() {
return "Friend{" +
"time=" + time +
", name='" + name + '\'' +
'}';
}
}
Also you should override toString()
method to be able to view if the collection/array has been sorted properly.此外,您应该覆盖
toString()
方法,以便能够查看集合/数组是否已正确排序。
If you need to implement more flexible sorting of your custom class, it's better to implement a Comparator
object:如果您需要对自定义 class 实现更灵活的排序,最好实现一个
Comparator
器 object:
Collections.sort(list, (f1, f2) -> { // inverse comparator as lambda
if (f1.time == f2.time) {
return - f1.name.compareTo(f2.name);
}
return f1.time - f2.time > 0 ? -1 : 1;
});
Problem has solved by this code.此代码已解决问题。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
class Friend
{
long time;
String name;
Friend(long t,String n)
{
time=t;
name=n;
}
}
public class Practice4 {
public static void main(String[] args) {
long l1=1590065750535l;
long l2=1590065760674l;
long l3=1590065784567l;
long l4=1590065760674l;
Friend f[]=new Friend[4];
f[0]=new Friend(l1,"A");
f[1]=new Friend(l3,"B");
f[2]=new Friend(l2,"C");
f[3]=new Friend(l4,"D");
ArrayList<Friend> list=new ArrayList<Friend>();
for(int i=0;i<f.length;i++)
list.add(f[i]);
Collections.sort(list,new Comparator<Friend>() {
public int compare(Friend arg0, Friend arg1) {
return (int) (arg0.time - arg1.time);
}
});
for(Friend l: list)
{
System.out.println("Name: "+l.name+", Time: "+l.time);
}
}
}
Add the comparator to the sort将比较器添加到排序中
Collections.sort(list, (c1, c2) -> Long.valueOf(c1.time).compareTo(Long.valueOf(c2.time)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.