Flu*_*xxy 28 java sorting arraylist
我必须创建一个方法,根据电子邮件按字母顺序对对象的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");
}
Run Code Online (Sandbox Code Playgroud)
Kon*_*kov 82
排序部分可以通过实现自定义来完成Comparator<Vehicle>.
Collections.sort(vehiclearray, new Comparator<Vehicle>() {
public int compare(Vehicle v1, Vehicle v2) {
return v1.getEmail().compareTo(v2.getEmail());
}
});
Run Code Online (Sandbox Code Playgroud)
此匿名类将用于按字母顺序对相应电子邮件中的Vehicle对象进行ArrayList排序.
升级到Java8还可以通过方法引用以更简洁的方式实现它:
Collections.sort(vehiclearray, Comparator.comparing(Vehicle::getEmail));
Run Code Online (Sandbox Code Playgroud)
Sub*_*mal 12
即使问题有一个可接受的答案,我想分享一些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()));
Run Code Online (Sandbox Code Playgroud)
.
// sort the Vehicles in a Stream
list.stream().sorted((p1, p2) -> p1.getEmail().compareTo(p2.getEmail()));
Run Code Online (Sandbox Code Playgroud)
.
// 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));
Run Code Online (Sandbox Code Playgroud)
.
// 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));
Run Code Online (Sandbox Code Playgroud)