정렬 할 때 특정 값을 무시하여 항상 정렬 된 목록의 맨 아래에 표시되도록하려면 어떻게해야합니까?

코드 511788465541441

항목 목록이 있고 각 항목에는 가격 필드가 있습니다. 일부 항목의 가격은 999와 같습니다. 정렬 할 때 정렬 방향이 오름차순이든 내림차순이든 항상 가격 == 999 인 요소가 목록의 맨 아래에 있기를 원합니다.

나는 아래 코드를 지 쳤고 낮음에서 높음 (오름차순)으로 정렬하지만 내림차순에는 작동하지 않습니다.

Collections.sort(itemList, new Comparator<Item>() {
    @Override
    public int compare(Item o1, Item o2) {
        if(sort == 4){ // Low to High
            return Double.compare(o1.getPrice(), o2.getPrice());
        }else{ // High to Low
            return Double.compare(o2.getPrice(), o1.getPrice());

        }
    }
});
신자

오름차순 :

Collections.sort(items, new Comparator<Item>()
{
    @Override
    public int compare(Item o1, Item o2)
    {
        if (o1.getPrice() == 999 && o1.getPrice() < o2.getPrice()) {
            return 1;
        }
        if (o2.getPrice() == 999) {
            return -1;
        }
        return Double.compare(o1.getPrice(), o2.getPrice());
    }
});

그리고 내림차순 :

Collections.sort(items, Collections.reverseOrder(new Comparator<Item>()
{
    @Override
    public int compare(Item o1, Item o2)
    {
        if (o1.getPrice() == 999 || o2.getPrice() == 999) {
            return 1;
        }
        return Double.compare(o1.getPrice(), o2.getPrice());
    }
}));

테스트:

List<Item> items = new ArrayList<Item>();
items.add(new Item(10));
items.add(new Item(50));
items.add(new Item(1050));
items.add(new Item(999));
items.add(new Item(40));
items.add(new Item(999));
items.add(new Item(30));
items.add(new Item(1050));

산출:

오름차순

10.0
30.0
40.0
50.0
1050.0
1050.0
999.0
999.0

내림차순

1050.0
1050.0
50.0
40.0
30.0
10.0
999.0
999.0

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관