Map을 회전시킬 수있는 Util 라이브러리 (commonsXXX 또는 다른 것)에 함수가 있습니까?지도를 회전하는 Util 기능?
은 "rotate"해야 Map<Permission,Set<User>>
이됩니다.
구현하기가 어렵지는 않지만 기존의 일반적인 라이브러리를 사용하면 "두 번 휠을 고안하지 마십시오"라는 측면에서 더 나은 것으로 보입니다.
Map을 회전시킬 수있는 Util 라이브러리 (commonsXXX 또는 다른 것)에 함수가 있습니까?지도를 회전하는 Util 기능?
은 "rotate"해야 Map<Permission,Set<User>>
이됩니다.
구현하기가 어렵지는 않지만 기존의 일반적인 라이브러리를 사용하면 "두 번 휠을 고안하지 마십시오"라는 측면에서 더 나은 것으로 보입니다.
필자가 설명하는 것과 같은 일을 할 필 요가 있었지만 필자는 commons-collections에서 멀티 맵을 사용하고 내 자신의 inverse 함수를 작성했습니다. (적어도 3 년 전 jdk1.4를 사용 했으므로 구아바는 옵션이 아니 었습니다.)
그러나 원래 맵을 SetMultimap으로 변경 한 경우 (키를 값 컬렉션에 매핑 할 때 멀티 맵을 사용하는 것이 더 좋음) 가) 쉽게 값을 삽입 만든다 때문에, 당신은 com.google.common.collect.Multimaps.invertFrom을 사용할 수
public static <K,V,M extends Multimap<K,V>> M invertFrom(Multimap<? extends V,? extends K> source,
M dest)
Copies each key-value mapping in source into dest, with its key and value reversed.
Parameters:
source - any multimap
dest - the multimap to copy into; usually empty
Returns:
dest
구아바의 BiMap.inverse()
을 살펴보십시오. 그렇지 않으면 MapUtils.invertMap()
을 사용할 수 있습니다.
아마도이 점을 생각해 봤지만지도를 뒤집으려면 키와 값이 고유해야합니다.
자세히 살펴에서 편집, 나는 더 공개적으로 사용 가능한 구성 요소가 당신을 위해 것을 을 할 것입니다 확신 해요. 질문을 반전 된 Map<A,B>
에서 Map<B,A>
으로 읽었습니다.
이 작업이 수행되는지 여부는 확실하지 않습니다. 'inverse()'는'Map
일부 유틸리티 라이브러리에서 이와 비슷한 것을 발견 할 가능성은 거의 없다고 생각합니다.
단순한 반전이 아니기 때문에 원래지도 값에서 Permission
개 개체의 압축을 풀어야한다고 말하고 있습니다.
아직 구아바가 가지고 있습니다. :-) –
가 나도 일반 도서관이를 찾을 수 없습니다, 그래서 여기 내 구현 :
public static <K, V> Map<V, Set<K>> invertMapToSet(Map<K, ? extends Set<V>> ksToVs) {
Map<V, Set<K>> vsToKs = new HashMap<V, Set<K>>();
for (Entry<K, ? extends Set<V>> kToVs : ksToVs.entrySet()) {
for (V v : kToVs.getValue()) {
Set<K> ks = vsToKs.get(v);
if (ks == null) {
ks = new HashSet<K>();
vsToKs.put(v, ks);
}
ks.add(kToVs.getKey());
}
}
return vsToKs;
}
당신이 도입 된 것으로 간주 되세요 다 대다 관계 사이에있는 UserPermission 클래스? 모든 UserPermissions를 쉽게 반복하고 원하는 구조로 두 개의 멀티 맵을 만들 수 있습니다. –
@ Javid Jamae : 그리 복잡하지는 않지만지도가 연결되지 않아야합니다. 회전 된 것은 연결되지 않은 사본 일 수 있습니다. – Ralph