Coding/Java
JAVA의 비교 interface Comparable vs Comparator 구현하기 (인터페이스 구현, 익명함수, 람다)
shbada
2021. 10. 19. 21:30
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]
}
반응형