JAVA의 비교 interface Comparable vs Comparator 구현하기 (인터페이스 구현, 익명함수, 람다)

반응형
728x90
반응형

interface Comparable

매개변수를 1개 받는다.

package java.lang;
import java.util.*;

public interface Comparable<T> {
	/* ... */
    public int compareTo(T o);
}

 

 

Comparable 구현하기

  • 1) 오름차순
public class Member implements Comparable<Member> {
	...
    public int compareTo(Member member) {
        /** 오름차순 출력 */
        if (this.memberId > member.memberId) {
            return 1;
        } else if (this.memberId < member.memberId) {
            return -1;
        } else {
            return 0;
        }
    }
}

 

public class Member implements Comparable<Member> {
	...
    public int compareTo(Member member) {
        /** 오름차순 출력 */
        return (this.memberId - member.memberId);        // 오름차순
    }
}

 

  • 2) 내림차순
public class Member implements Comparable<Member> {
	...
    public int compareTo(Member member) {
        /** 내림차순 출력 */
        if (this.memberId > member.memberId) {
            return -1;
        } else if (this.memberId < member.memberId) {
            return 1;
        } else {
            return 0;
        }
    }
}

 

public class Member implements Comparable<Member> {
	...
    public int compareTo(Member member) {
        /** 내림차순 출력 */
        return (this.memberId - member.memberId) * (-1); // 내림차순
    }
}

 

 

interface Comparator

매개변수를 2개 받는다. 하나는 자신이고, 다른 하나는 비교대상이다.

@FunctionalInterface
public interface Comparator<T> {
    /** ... */
    int compare(T o1, T o2);
    
    ...
}

 

 

Comparator 구현하기

  • 1) 오름차순 (오름차순/내림차순 코드는 위 Comparable 와 동일하다.)
public class Member implements Comparator<Member> {
	...
    @Override
    public int compare(Member member1, Member member2) { /* 하나는 자신이고, 다른 하나는 비교대상 */
        /** 오름차순 출력 */
        /* this 랑 비교하겠다 */
        if (member1.memberId > member2.memberId) {
            return 1;
        } else if (member1.memberId < member2.memberId) {
            return -1;
        } else {
            return 0;
        }
    }
}

 

  • 익명함수로 구현하기
public class MemberTreeSetTest {
    public static void main(String[] args) {
        TreeSet<String> set2 = new TreeSet<String>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2) * (-1); // 내림차순
            }
        });

        set2.add("AAA");
        set2.add("CCC");
        set2.add("BBB");
        
        System.out.println(set2); // [CCC, BBB, AAA]
}

 

  • 람다로 구현하기
public class MemberTreeSetTest {
    public static void main(String[] args) {
        /* 람다 */
        TreeSet<String> set3 = new TreeSet<String>((String o1, String o2) -> {
            return o1.compareTo(o2) * (-1);
        });

        set3.add("AAA");
        set3.add("CCC");
        set3.add("BBB");

        System.out.println(set3); // [CCC, BBB, AAA]
}

 

 

반응형

Designed by JB FACTORY