본문 바로가기
자바

속성 별 사용자 정의 객체의 ArrayList 정렬

by º기록 2021. 4. 16.
반응형

비교기를 사용하여 ArrayLists를 정렬하는 것에 대해 읽었으나 일부 연구에 따르면 comparteto 를 사용하는 사람들은 문자열의 방법입니다.

사용자 정의 개체의 ArrayList를 속성 중 하나로 정렬하고 싶었습니다. 날짜 개체 ( getStartday () ).일반적으로 item1.getstartDate ()를 비교합니다. 이전 (item2.getstartdate ()) 그래서 내가 쓸 수 있는지 궁금해하고있었습니다.

public class CustomComparator {
    public boolean compare(Object object1, Object object2) {
        return object1.getStartDate().before(object2.getStartDate());
    }
}

public class RandomName {
    ...
    Collections.sort(Database.arrayList, new CustomComparator);
    ...
}

 

해결 방법

 



public class CustomComparator implements Comparator<MyObject> {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
}

비교 () 메소드는 int 를 반환해야하므로 어쨌든 계획중인 것처럼 boolean 를 직접 리턴 할 수 없어야합니다.

당신의 정렬 코드는 당신이 쓴 것처럼 바로있을 것입니다 :

Collections.sort(Database.arrayList, new CustomComparator());

비교기를 재사용 할 필요가 없으면이 모든 것을 작성하는 것이 약간 짧은 방법이 익명의 클래스로 작성하는 것입니다.

Collections.sort(Database.arrayList, new Comparator<MyObject>() {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
});



Collections.sort(Database.arrayList, 
                        (o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));


Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));


Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));

이들 모두는 동일한 형태입니다.

 

참조 페이지 https://stackoverflow.com/questions/2784514

 

 

반응형

댓글