按字母顺序对对象的数组列表进行排序

2022-09-01 11:08:24

我必须创建一个方法,根据电子邮件按字母顺序对对象的ArrayList进行排序,然后打印排序的数组。我遇到麻烦的部分,它排序它。我已经研究了它并尝试使用,但这对我来说不起作用。我需要一种叫做比较器的东西,但无法弄清楚它是如何工作的。我是否必须使用它们,或者像气泡排序或插入排序之类的东西可以用于这种事情吗?Collections.sort(vehiclearray);

这是我到目前为止拥有的代码:

public static void printallsort(ArrayList<vehicle> vehiclearray){

   ArrayList<vehicle> vehiclearraysort = new ArrayList<vehicle>();
   vehiclearraysort.addAll(vehiclearray);

 //Sort
   for(int i = 0; i < vehiclearraysort.size(); i++) 
   if ( vehiclearray.get(i).getEmail() > vehiclearray.get(i+1).getEmail())

//Printing 
   for(i = 0; i < vehiclearraysort.size(); i++)           
   System.out.println( vehiclearraysort.get(i).toString() + "\n");

}

答案 1

排序部分可以通过实现自定义来完成。Comparator<Vehicle>

Collections.sort(vehiclearray, new Comparator<Vehicle>() {
    public int compare(Vehicle v1, Vehicle v2) {
        return v1.getEmail().compareTo(v2.getEmail());
    }
});

此匿名类将用于按字母顺序对相应电子邮件基础上的对象进行排序。VehicleArrayList

升级到 Java8 还可以让您通过方法引用以不那么冗长的方式实现此目的:

Collections.sort(vehiclearray, Comparator.comparing(Vehicle::getEmail));

答案 2

虽然这个问题已经有了一个被接受的答案,但我想分享一些Java 8解决方案。

// if you only want to sort the list of Vehicles on their email address
Collections.sort(list, (p1, p2) -> p1.getEmail().compareTo(p2.getEmail()));

.

// sort the Vehicles in a Stream
list.stream().sorted((p1, p2) -> p1.getEmail().compareTo(p2.getEmail()));

.

// sort and print with a Stream in one go
list.stream().sorted((p1, p2) -> p1.getEmail().compareTo(p2.getEmail())).forEach(p -> System.out.printf("%s%n", p));

.

// sort with an Comparator (thanks @Philipp)
// for the list
Collections.sort(list, Comparator.comparing(Vehicle::getEmail));
// for the Stream
list.stream().sorted(Comparator.comparing(Vehicle::getEmail)).forEach(p -> System.out.printf("%s%n", p));

推荐