본문 바로가기
창고(2021년 이전)

[Java] Comparator

by 측면삼각근 2019. 11. 16.
728x90
반응형

 

이사이트 를 보고 복습차 정리(?)하는 글임!


Java에선 정렬들을 위한 목적으로 Objcet 를 비교하기 위해 Comparable interface에서 정의한 CompareTo()함수를 구현하거나 Comparator를 구현해야한다.
하지만 일단 지금 막힌 Comparator 만 치고 넘어갈것임..키키키 추후에 시간있을때 조금더 공부하고 마무리 해야지..

Comparator 은 static Comparator instance 로 비교대상인 objcet 를 수정하지 않고 비교를 위한 함수를 만들 수 있다.

public static Comparator<Type> myComparator = new Comparator<Type>(){
  public int compare(Type o1, Type o2){
    return o1 - o2;
  }
}

위 MyComparator를 다음과 같이 사용하면된다.

collections.sort(myList, myComparator);

 

예제

public class Book{
  private int price;
  public Book(int price){
    this.price = price;
  }
  
  public int getPrice(){
    return this.price;
  }
}

 

Comparator

import java.util.Collections;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Solution{
  public static Comparator<Book> myComoarator = new Comparator<Book>(){
  
    @Override
    public int compare(Book b1, Book b2){
    //오버라이드를 통한 compare재정의 (정렬기준설정)
      return b1.getPrice() - b2.getPrice();
    }
  }
  
  public static void main(String[] args){
    List<Book> myBookList = new ArrayList();
    myBookList.add(new Book(300));
    myBookList.add(new Book(310));
    myBookList.add(new Book(100));
    myBookList.add(new Book(200));
    
    System.out.println("Original : " + myBookList);
    
    //Collection.sort 로 myList 와 위에서 선언된 myCoparator를 넘기면 Object로 sort가 가능하다.
    Collection.sort(myBookList, myCoparator);

  }
}

 

Anonymous Comparator

import java.util.Collections;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Solution{
   public static void main(String[] args) {
      List<Book> myBookList = new ArrayList();
      myBookList.add(new Book(300));
      myBookList.add(new Book(310));
      myBookList.add(new Book(100));
      myBookList.add(new Book(200));

      System.out.println("Original: " + myBookList);

      // 따로 선언이 된 위 Comparator 예시와 다르게 sort 안에서 익명으로 선언하고있다.
      Collections.sort(myBookList, new Comparator<Book>() {
          @Override
          public int compare(Book b1, Book b2) {
              return b1.getPrice() - b2.getPrice();
          }
      });
      
      //참고! : sort 코드를 Lambda식으로 전환하면 훨씬 더 깔끔하게 표현할 수 있다.
      //Collections.sort(myBookList,(Book b1, Book b2)-> b1.getPrice() - b2.getPrice());
        
    }
}

 

 

반응형