大文字と小文字が区別されるため、以下のコードでは 'ladies'という出力が正しく返されます。大文字と小文字を区別しない明示的な順序付けguava
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)
小文字を区別しないが、グアバで比較する場合を行うにはどのように?私はそれを見たよう
Shouldn大文字と小文字の違いがターゲットマップにあるのでしょうか?または、あなたのコントロールの外に明示的に注文していますか? – shmosel
重複していると思われる人には、質問をよく読んでください。他の回答が関連していると思われる場合は、それをテストして確認してください。 – shmosel
私はカスタム明示的な注文を持っているので、重複した質問とは思わない。 – user2057006