2013-10-19 33 views
24

Tôi phải tạo một phương thức sắp xếp ArrayList của các đối tượng theo thứ tự bảng chữ cái theo email và sau đó in mảng đã sắp xếp. Phần mà tôi đang gặp rắc rối với nó phân loại nó. Tôi đã nghiên cứu và thử sử dụng Collections.sort(vehiclearray); nhưng điều đó không hiệu quả đối với tôi. Tôi đã được rằng tôi cần một cái gì đó được gọi là một so sánh nhưng không thể tìm ra cách nó làm việc. Tôi sẽ phải sử dụng những thứ đó hoặc có thể có thứ gì đó giống như loại bong bóng hoặc sắp xếp công việc sắp xếp cho loại điều này?Sắp xếp một ArrayList của các đối tượng theo thứ tự abc

Đây là mã mà tôi có cho đến nay:

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"); 

} 
+3

Không, bạn cần có một so sánh. Điều gì đã không làm việc về nó? –

+2

Vui lòng thực hiện theo các quy ước đặt tên Java: 'Xe' thay vì' xe'. Và có lẽ 'printAllSort' và' carArraySort'. – arshajii

+1

Có rất nhiều hướng dẫn giải thích cách triển khai bộ so sánh cho các lớp học của bạn. Hãy thử kiểm tra điều này trước tiên: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html –

Trả lời

66

Phần sắp xếp có thể được thực hiện bằng cách thực hiện một phong tục Comparator<Vehicle>.

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

lớp vô danh này sẽ được sử dụng để phân loại các đối tượng trong VehicleArrayList trên cơ sở các email tương ứng của họ theo thứ tự abc.

Nâng cấp lên Java8 sẽ cho phép bạn cũng thực hiện điều này một cách ít tiết với một tài liệu tham khảo phương pháp:

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

Ngay cả những câu hỏi có câu trả lời chấp nhận tôi muốn chia sẻ một số Java giải pháp 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)); 
+2

Tôi nghĩ rằng điều này có thể được đơn giản hóa bằng cách sử dụng 'Comparator.comparing': https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function- –

0

gói srikanthdukuntla;

nhập java.util.ArrayList; nhập java.util.List;

public class 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); 

} 

}

Các vấn đề liên quan