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());
}
}
반응형
'창고(2021년 이전)' 카테고리의 다른 글
React_1 : 리액트, 리액트 프로젝트 시작하기 (0) | 2019.12.12 |
---|---|
[JS] OOP - Inheritance patterns_상속 (0) | 2019.11.21 |
[자료구조] Linked List, Graph, Tree, Binary Search Tree, Hash Table (0) | 2019.11.15 |
[자료구조] Stack & Queue (0) | 2019.11.15 |
[JS] OOP(Objcet Oriented Programming) (0) | 2019.11.14 |