728x90
반응형
일반적으로는
collections.sort(arraylist)를 하면 되지만
어레이리스트가 어떠한 클래스 객체를 담는다면..
정렬을 어떻게 해야할까?
Collections.sort에서 자동완성을 시켜보면
sort(List<T> list)가 있고
sort(List<T> list, Comparator<? super T> c) 가 있다.
여기서 아래의 저 기괴한 Comparator를 사용해야 한다.
class MyComparator implements Comparator<Goods>{
@Override
public int compare(Goods a,Goods b){
if(a.getPrice()>b.getPrice()) return 1;
if(a.getPrice()<b.getPrice()) return -1;
return 0;
}
}
Comparator를 구현해야한다.
compare메소드 하나만 구현하면 된다.
a,b를 비교해서 a가 크면 1, b가 크면 -1, 같으면 0을 반환하면 된다.
이렇게 잘 작성 한 후
Collections.sort(goods_list, new MyComparator());
이렇게 sort메소드의 두번째 인자로 아까 만든 MyComparator객체를 생성해서 넣어주면 된다.
.
.
.
근데..
compare메소드에서 비교하는거 구현할 때..
int같은 자료형이면 상관이 없는데... String이면 어떡하지?
사전순으로 비교하고싶은데..우짤까
class UserComparator implements Comparator<Goods>{
@Override
public int compare(Goods g1, Goods g2) {
// 단어 길이가 같을 경우
if(g1.getId().length() == g2.getId().length()) {
return g1.getId().compareTo(g2.getId()); // 사전 순 정렬
}
// 그 외의 경우
else {
return g1.getId().length() - g2.getId().length();
}}
}
여기서 id는 String이다.
이렇게 작성해서 사용하면 사전순으로 정렬할 수 있다.
역순정렬 하는 방법
Collections.sort(goods_list, new MyComparator().reversed());
Comparator.reversed()를 붙여서 사용함.
728x90
반응형
'2022-2 > 자바' 카테고리의 다른 글
[자바] 제네릭과 컬렉션 (0) | 2022.12.18 |
---|---|
[자바] 네트워크 (0) | 2022.12.17 |
[자바] 멀티스레드, synchronized (0) | 2022.12.01 |
[자바] Vector (0) | 2022.12.01 |
자바 Exception/Generic <T> (0) | 2022.11.24 |
댓글