以下代码正确返回输出“ladies”,因为区分大小写。
import com.google.common.collect.SortedSetMultimap;
import com.google.common.collect.TreeMultimap;
import com.google.common.collect.Ordering;
private static final Ordering<String> PRODUCT_ORDER = Ordering
.explicit("men","ladies")
.reverse();
private void testGuavaOrdering() {
SortedSetMultimap<Integer, String> onlineAreaPriorityCountMap = TreeMultimap
.create(Collections.reverseOrder(), PRODUCT_ORDER);
onlineAreaPriorityCountMap.put(1, "men");
onlineAreaPriorityCountMap.put(1, "men");
onlineAreaPriorityCountMap.put(1, "ladies");
onlineAreaPriorityCountMap.put(1, "ladies");
System.out.println(onlineAreaPriorityCountMap.values().iterator().next());
}
但,下面的代码不工作,若我从一个男人换到另一个男人,就会抛出异常。
private static final Ordering<String> PRODUCT_ORDER = Ordering
.explicit("Men","Ladies")
.reverse()
private void testGuavaOrdering() {
SortedSetMultimap<Integer, String> onlineAreaPriorityCountMap = TreeMultimap
.create(Collections.reverseOrder(), PRODUCT_ORDER);
onlineAreaPriorityCountMap.put(1, "men");
onlineAreaPriorityCountMap.put(1, "men");
onlineAreaPriorityCountMap.put(1, "ladies");
onlineAreaPriorityCountMap.put(1, "ladies");
System.out.println(onlineAreaPriorityCountMap.values().iterator().next());
}
例外情况:
Exception in thread "main" com.google.common.collect.Ordering$IncomparableValueException: Cannot compare value: men
at com.google.common.collect.ExplicitOrdering.rank(ExplicitOrdering.java:46)
at com.google.common.collect.ExplicitOrdering.compare(ExplicitOrdering.java:40)
at com.google.common.collect.ReverseOrdering.compare(ReverseOrdering.java:38)
at java.util.TreeMap.compare(TreeMap.java:1295)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at com.google.common.collect.AbstractMapBasedMultimap.put(AbstractMapBasedMultimap.java:195)
at com.google.common.collect.AbstractSetMultimap.put(AbstractSetMultimap.java:121)
at com.google.common.collect.TreeMultimap.put(TreeMultimap.java:78)
at TestMap.testGuavaOrdering(TestMap.java:38)
at TestMap.main(TestMap.java:32)