具有不可比较值异常的比较器和未知值
Comparator and unknow value with IncomparableValueException
我使用这个自定义比较器
List<String> currencies = ImmutableList.of("PLN","EUR","USD","GBP", "CHF");
final Ordering<String> currencyOrdering = Ordering.explicit(currencies);
@Override
public int compare(Account o1, Account o2) {
return currencyOrdering.compare(o1.getCurrency(),o2.getCurrency());
}
但是我有错误
IncomparableValueException:无法比较值:JPY
我希望这些未知值最后是随机的...
如果可能,如何在标准 Java 库中解决它。
你能做什么:
List<String> currencies = ImmutableList.of("OTHERS", "PLN","EUR","USD","GBP", "CHF");
final Ordering<String> currencyOrdering = Ordering.explicit(currencies).onResultOf(lang -> currencies.contains(lang) ? lang : "OTHERS");
System.out.println(currencyOrdering.compare("JPY", "PLN")); # -1
System.out.println(currencyOrdering.compare("JPY", "TTT")); # 0
System.out.println(currencyOrdering.compare("CHF", "GBP")); # 1
基本上,如果语言在 currencies
列表中,我会要求 Guava 将语言映射到它们自己的值,否则我只给它们值 OTHERS
,这是列表中的第一个(所以不在列表中的所有内容都放在列表的开头)
注意:您可以在没有番石榴的情况下使用:
List<String> currencies = List.of("PLN","EUR","USD","GBP", "CHF");
Comparator<Object> objectComparator = Comparator.comparingInt(currencies::indexOf);
System.out.println(objectComparator.compare("JPY", "PLN"));
System.out.println(objectComparator.compare("JPY", "TTT"));
System.out.println(objectComparator.compare("CHF", "GBP"));
基本上,我指定项目的“排名”是它在列表中的位置。不需要 OTHERS,因为缺少的元素的值为 -1
我使用这个自定义比较器
List<String> currencies = ImmutableList.of("PLN","EUR","USD","GBP", "CHF");
final Ordering<String> currencyOrdering = Ordering.explicit(currencies);
@Override
public int compare(Account o1, Account o2) {
return currencyOrdering.compare(o1.getCurrency(),o2.getCurrency());
}
但是我有错误
IncomparableValueException:无法比较值:JPY
我希望这些未知值最后是随机的... 如果可能,如何在标准 Java 库中解决它。
你能做什么:
List<String> currencies = ImmutableList.of("OTHERS", "PLN","EUR","USD","GBP", "CHF");
final Ordering<String> currencyOrdering = Ordering.explicit(currencies).onResultOf(lang -> currencies.contains(lang) ? lang : "OTHERS");
System.out.println(currencyOrdering.compare("JPY", "PLN")); # -1
System.out.println(currencyOrdering.compare("JPY", "TTT")); # 0
System.out.println(currencyOrdering.compare("CHF", "GBP")); # 1
基本上,如果语言在 currencies
列表中,我会要求 Guava 将语言映射到它们自己的值,否则我只给它们值 OTHERS
,这是列表中的第一个(所以不在列表中的所有内容都放在列表的开头)
注意:您可以在没有番石榴的情况下使用:
List<String> currencies = List.of("PLN","EUR","USD","GBP", "CHF");
Comparator<Object> objectComparator = Comparator.comparingInt(currencies::indexOf);
System.out.println(objectComparator.compare("JPY", "PLN"));
System.out.println(objectComparator.compare("JPY", "TTT"));
System.out.println(objectComparator.compare("CHF", "GBP"));
基本上,我指定项目的“排名”是它在列表中的位置。不需要 OTHERS,因为缺少的元素的值为 -1