Сортировка 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");
}
Ответы
Ответ 1
Часть сортировки может быть выполнена путем реализации пользовательского Comparator<Vehicle>
.
Collections.sort(vehiclearray, new Comparator<Vehicle>() {
public int compare(Vehicle v1, Vehicle v2) {
return v1.getEmail().compareTo(v2.getEmail());
}
});
Этот анонимный класс будет использоваться для сортировки объектов Vehicle
в ArrayList
на основе их соответствующих писем в алфавитном порядке.
Обновление до 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));
Ответ 3
В этой ссылке вы можете найти код, который поможет вам сортировать arraylist объектов в нисходящем и восходящем порядке.
http://beginnersbook.com/2013/12/java-arraylist-of-object-sort-example-comparable-and-comparator/
Ответ 4
пакет srikanthdukuntla;
импортировать java.util.ArrayList;
import java.util.List;
открытый класс AlphabetsOrder {
public static void main(String[] args) {
String temp;
List<String> str= new ArrayList<String>();
str.add("Apple");
str.add("zebra");
str.add("Umberalla");
str.add("banana");
str.add("oxo");
str.add("dakuntla");
str.add("srikanthdukuntla");
str.add("Dukuntla");
for(int i=0;i<str.size();i++){
for(int j=i+1;j<str.size();j++){
if(str.get(i).compareTo(str.get(j))<0){
temp=str.get(i);
str.set(i, str.get(j));
str.set(j,temp );
}
}
}
System.out.println("List of words in alphabetical order "+str);
}
}
Ответ 5
ясный
vehiclearray.sort(Comparator.comparing(Vehicle::getEmail()));