[JAVA] List에 담겨있는 객체의 특정 필드값을 기준으로 정렬

오잉·2022년 12월 4일
0

JAVA

목록 보기
2/4

방법

List(Collections framework)에 담겨 있는 객체를 특정 필드를 기준으로 정렬하기 위해
Comparable 인터페이스와 Collections.sort()를 사용한다.

public class Content implements Comparable<Content> {
    private String title;
    private String description;
    private int price;

    public Content(String title, String description, int price) {
        this.title = title;
        this.description = description;
        this.price = price;
    }

    @Override
    public int compareTo(Content c) {
        return price - c.price;
    }
}
  • Comparable 인터페이스의 compareTo()메소드를 오버라이딩
List<Content> contentList = new ArrayList<>();
contentList.add(new Content("t1","d1",300);
contentList.add(new Content("t2","d2",500);
contentList.add(new Content("t3","d3",100);

Collections.sort(contentList);
  • Collections.sort(list명)
  • 결과 : price기준 오름차순 정렬 (내림차순으로 하고 싶으면 return c.price - price;)

참고
https://siyoon210.tistory.com/21
https://choichumji.tistory.com/119


내 프로젝트에서의 적용

목적 : DayDto라는 객체의 time필드(LocalTime) 기준으로 정렬

DayDto (객체)

package hyu_memento.memento_back.controller.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalTime;

@Getter
@NoArgsConstructor
public class DayDto implements Comparable<DayDto> {
    private LocalTime time;
    private String title;
    private String description;

    @Builder
    public DayDto(LocalTime time, String title, String description) {
        this.time = time;
        this.title = title;
        this.description = description;
    }

    @Override
    public int compareTo(DayDto d) {
        int i = time.toSecondOfDay();
        int j = d.getTime().toSecondOfDay();
        return i-j;
    }
}
  • LocalTime을 비교하기 위해 각각의 시간을 초로 변환 (toSecondOfDay)
profile
오잉이라네 오잉이라네 오잉이라네 ~

0개의 댓글