[Java] Java Pair 클래스 생성 및 정렬

OOING·2023년 11월 2일
0

Trouble Shooting

목록 보기
5/11

Pair 클래스 만들기

C++의 Pair를 유용하게 쓰던 본인은 Spring Boot에서 Pair를 이용하길 원했다.
그런데.. Java에는 Pair가 없다는 충격적인 사실을 깨달았다!!
몇몇 라이브러리가 있다고 하지만 본인은 매우 간단한 기능만 필요하기 때문에 Pair 클래스를 만들기로 했다.

Pair 클래스 코드

public class Pair<T, S> {
    private T first;
    private S second;

    public Pair(T first, S second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst(){
        return this.first;
    }

    public S getSecond() {
        return this.second;
    }
}

여러 코드에서 계속 사용하기 위해 generic 타입을 이용했다.
Pair 간의 정렬도 필요했는데, generic 타입이라 타입마다 정렬 방식이 다르기 때문에 내부에 정렬 함수(compare)를 작성하지 않고, 정렬할 때마다 람다식을 이용하기로 결정.

Pair 클래스 정렬

하고나니 되게 간단한데, 할 때는 삽질을 좀.. 했다.
cannot infer functional interface type <- 이 오류가 자꾸 떴기 때문..

현재 프로젝트 코드에서는 List<Pair<Promotion, String>> 을 Promotion의 시작 시간 순서대로 정렬해야 했다.
겸사겸사 Timestamp 정렬 방식도 꽤 많이 익혔고, sort() 함수도 조금..

Pair 정렬 코드

내림차순 정렬

list.sort((Pair<Promotion, String> p1, Pair<Promotion, String> p2) -> {
    if(p1.getFirst().getStart().before(p2.getFirst().getStart()))
        return 1;	// boolean 값(true, false) 안 됨
    else return -1;
});

first의 자료형이 Promotion 클래스인데, 정렬을 Promotion 클래스 내부의 start(:Date)가 빠른 순으로(먼저 등록된 순으로) 정렬하기 위해 before 함수를 이용했다.

sort 내부 조건문의 반환값이 true일 경우 1, false일 경우 -1이어야 한단다.
이걸 계속 boolean 값으로 반환하게 해서 오류도 생겼었다.

profile
HICE 19

0개의 댓글