반응형
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]
}
반응형
'Coding > Java' 카테고리의 다른 글
Java 코드로 TreeMap 정리하기 (0) | 2021.11.02 |
---|---|
자바 직렬화 Serializable, Externalizable 예제로 이해하기 (0) | 2021.10.20 |
스트림/람다식 사용하여 가장 긴 문자열 추출하기 (0) | 2021.10.18 |
[Java8 람다식] Function interface 간단 예제 (0) | 2021.10.12 |
Optional 의 Map, flatMap 사용하기 (0) | 2021.08.08 |