2013-10-19 6 views
24

ArrayList의 객체를 전자 메일에 따라 사전 순으로 정렬 한 다음 정렬 된 배열을 인쇄하는 메서드를 만들어야합니다. 내가 그것을 분류하는 데 문제가있는 부분. 나는 그것을 조사하고 Collections.sort(vehiclearray);을 사용해 보았지만 저에게는 효과가 없었습니다. 나는 비교 자라고 불리는 것을 필요로했지만 그것이 어떻게 작동 하는지를 알 수 없었다. 이런 것들을 사용해야하거나 버블 정렬이나 삽입 정렬 작업 같은 것을 사용할 수 있습니까?알파벳 순으로 객체의 ArrayList 정렬

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

아니, 당신은 비교가 필요합니다. 그것에 대해 무엇이 효과가 없었습니까? –

+2

Java 명명 규칙을 따르십시오 : '차량'대신 '차량'. 그리고 아마'printAllSort'와'vehicleArraySort'. – arshajii

+1

클래스에 대한 비교기를 구현하는 방법을 설명하는 자습서가 많이 있습니다. 이 문서를 먼저 확인하십시오. http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html –

답변

66

소트 부분은 사용자 정의 Comparator<Vehicle>를 구현하여 수행 할 수 있습니다

는 지금까지이 그 코드입니다.
Collections.sort(vehiclearray, new Comparator<Vehicle>() { 
    public int compare(Vehicle v1, Vehicle v2) { 
     return v1.getEmail().compareTo(v2.getEmail()); 
    } 
}); 

이 익명 클래스

순으로 해당 이메일의 기본에 ArrayListVehicle 객체를 정렬에 사용됩니다. Java8에

업그레이드는 또한 방법 참조 덜 자세한 방법으로이를 구현하게됩니다 :

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

심지어 질문 좀 자바 (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

필자는 이것이 'Comparator.comparing'을 사용하여 단순화 될 수 있다고 생각합니다. https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparing-java.util.function.Function- –

0

패키지 srikanthdukuntla;

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

} 

은}

관련 문제