필자는 비슷한 기능을 구현할 수없는 클래스가 있지만 2 개의 필드를 기반으로 정렬해야합니다. 구아바에서 어떻게 이것을 할 수 있습니까?여러 기준으로 구아바 주문을 사용하여 개체 목록 정렬
의 클래스가
class X {
String stringValue;
java.util.Date dateValue;
}
라고하자 내가 '각 내에서 내림차순 첫번째 다음 DATEVALUE에 따라 값 필드를 기준으로 정렬 할이
List<X> lotsOfX;
의 목록을 가지고 그룹 '값 필드.
public class DateValueSortFunction<X> implements Function<X, Long> {
@Override
public Long apply(X input) {
return input.getDateValue().getTime(); //returns millis time
}
}
및
public class StringValueSortFunction<X> implements Function<X, Integer> {
@Override
public Integer apply(X input) {
if(input.getStringValue().equalsIgnoreCase("Something"))
return 0;
else if(input.getStringValue().equalsIgnoreCase("Something else"))
return 1;
else
return 2;
}
}
sortedList에서
예상 출력은이
Something 03/18/2013
Something 03/17/2013
Something else 03/20/2013
Something else 03/19/2013
....
:
List<X> sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(dateValueSortFunction).reverse().sortedCopy(lotsOfX));
sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(stringValueSortFunction).sortedCopy(sortedList));
기능
는 다음과 같이 정의된다내가 지금까지 해왔 던 것은
내 접근 방식이 작동하지만 목록을 두 번 통과하는 데 분명히 비효율적입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
참고 : GWT 앱에서 이것을 사용하십시오. comparable 구현은 옵션이 아닙니다.
이것은 작동합니다. 고맙습니다!! – user949110
거룩한 암소! 이것에 감사드립니다, IF ... IFSE 사례를 많이 구해 줬습니다! 나는 교차 조건의 악몽을 꾼다. – Ethenyl