아래의 비교기는 값 1000을 다른 모든 것보다 "큰"것으로 항상 취급합니다. 1000은 항상 마지막으로 정렬됩니다. 다른 값은 오름차순 또는 내림차순으로 정렬됩니다.
class AscendingComp implements Comparator<Integer>
{
@Override
public int compare(Integer o1, Integer o2)
{
if (o1.equals(o2)) return 0;
if (o1.equals(1000)) return 1;
if (o2.equals(1000)) return -1;
return o1.compareTo(o2);
}
}
class DescendingComp implements Comparator<Integer>
{
@Override
public int compare(Integer o1, Integer o2)
{
if (o1.equals(o2)) return 0;
if (o1.equals(1000)) return 1;
if (o2.equals(1000)) return -1;
return o2.compareTo(o1);
}
}
편집 : 이것은 일반적인 솔루션이 아니라, 특정 질문에 응답합니다. 일반적인 솔루션에서는 일치하지 않는 비교 결과를 반환하지 않도록 특히 equals()
및 compare()
계약에주의해야합니다. 예를 들어 조심스럽지 않고 우연히 돌아 오지 않으면 +1을 compare(a,b)
및 compare(b,a)
으로 말하면 정렬이 무한 루프가 될 수 있습니다.
어떤 값을 "무시"해야합니까? –
이 경우에는 1000을 무시해야합니다. –
예, 실행시 결정되는 방법은 무엇입니까? –