jimu-decompiled/sources/com/google/common/collect/Multimaps.java
2025-05-13 19:24:51 +02:00

364 lines
13 KiB
Java

package com.google.common.collect;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import com.google.common.collect.Maps;
import com.google.common.collect.Multiset;
import com.google.common.collect.Multisets;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
/* loaded from: classes.dex */
public final class Multimaps {
static final class AsMap<K, V> extends Maps.ViewCachingAbstractMap<K, Collection<V>> {
private final Multimap<K, V> d;
class EntrySet extends Maps.EntrySet<K, Collection<V>> {
EntrySet() {
}
@Override // com.google.common.collect.Maps.EntrySet
Map<K, Collection<V>> c() {
return AsMap.this;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set
public Iterator<Map.Entry<K, Collection<V>>> iterator() {
return Maps.a((Set) AsMap.this.d.keySet(), (Function) new Function<K, Collection<V>>() { // from class: com.google.common.collect.Multimaps.AsMap.EntrySet.1
@Override // com.google.common.base.Function
public /* bridge */ /* synthetic */ Object apply(Object obj) {
return apply((AnonymousClass1) obj);
}
@Override // com.google.common.base.Function
public Collection<V> apply(K k) {
return AsMap.this.d.get(k);
}
});
}
@Override // com.google.common.collect.Maps.EntrySet, java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean remove(Object obj) {
if (!contains(obj)) {
return false;
}
AsMap.this.a(((Map.Entry) obj).getKey());
return true;
}
}
AsMap(Multimap<K, V> multimap) {
Preconditions.a(multimap);
this.d = multimap;
}
@Override // java.util.AbstractMap, java.util.Map
public void clear() {
this.d.clear();
}
@Override // java.util.AbstractMap, java.util.Map
public boolean containsKey(Object obj) {
return this.d.containsKey(obj);
}
@Override // java.util.AbstractMap, java.util.Map
public boolean isEmpty() {
return this.d.isEmpty();
}
@Override // com.google.common.collect.Maps.ViewCachingAbstractMap, java.util.AbstractMap, java.util.Map
public Set<K> keySet() {
return this.d.keySet();
}
@Override // java.util.AbstractMap, java.util.Map
public int size() {
return this.d.keySet().size();
}
@Override // com.google.common.collect.Maps.ViewCachingAbstractMap
protected Set<Map.Entry<K, Collection<V>>> a() {
return new EntrySet();
}
@Override // java.util.AbstractMap, java.util.Map
public Collection<V> get(Object obj) {
if (containsKey(obj)) {
return this.d.get(obj);
}
return null;
}
@Override // java.util.AbstractMap, java.util.Map
public Collection<V> remove(Object obj) {
if (containsKey(obj)) {
return this.d.removeAll(obj);
}
return null;
}
void a(Object obj) {
this.d.keySet().remove(obj);
}
}
private static class CustomListMultimap<K, V> extends AbstractListMultimap<K, V> {
transient Supplier<? extends List<V>> a;
CustomListMultimap(Map<K, Collection<V>> map, Supplier<? extends List<V>> supplier) {
super(map);
Preconditions.a(supplier);
this.a = supplier;
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
this.a = (Supplier) objectInputStream.readObject();
setMap((Map) objectInputStream.readObject());
}
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeObject(this.a);
objectOutputStream.writeObject(backingMap());
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractListMultimap, com.google.common.collect.AbstractMapBasedMultimap
public List<V> createCollection() {
return this.a.get();
}
}
private static class CustomSetMultimap<K, V> extends AbstractSetMultimap<K, V> {
transient Supplier<? extends Set<V>> a;
CustomSetMultimap(Map<K, Collection<V>> map, Supplier<? extends Set<V>> supplier) {
super(map);
Preconditions.a(supplier);
this.a = supplier;
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
this.a = (Supplier) objectInputStream.readObject();
setMap((Map) objectInputStream.readObject());
}
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeObject(this.a);
objectOutputStream.writeObject(backingMap());
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractSetMultimap, com.google.common.collect.AbstractMapBasedMultimap
public Set<V> createCollection() {
return this.a.get();
}
}
static abstract class Entries<K, V> extends AbstractCollection<Map.Entry<K, V>> {
Entries() {
}
abstract Multimap<K, V> a();
@Override // java.util.AbstractCollection, java.util.Collection
public void clear() {
a().clear();
}
@Override // java.util.AbstractCollection, java.util.Collection
public boolean contains(Object obj) {
if (!(obj instanceof Map.Entry)) {
return false;
}
Map.Entry entry = (Map.Entry) obj;
return a().containsEntry(entry.getKey(), entry.getValue());
}
@Override // java.util.AbstractCollection, java.util.Collection
public boolean remove(Object obj) {
if (!(obj instanceof Map.Entry)) {
return false;
}
Map.Entry entry = (Map.Entry) obj;
return a().remove(entry.getKey(), entry.getValue());
}
@Override // java.util.AbstractCollection, java.util.Collection
public int size() {
return a().size();
}
}
static class Keys<K, V> extends AbstractMultiset<K> {
final Multimap<K, V> a;
class KeysEntrySet extends Multisets.EntrySet<K> {
KeysEntrySet() {
}
@Override // com.google.common.collect.Multisets.EntrySet
Multiset<K> c() {
return Keys.this;
}
@Override // com.google.common.collect.Multisets.EntrySet, java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean contains(Object obj) {
if (!(obj instanceof Multiset.Entry)) {
return false;
}
Multiset.Entry entry = (Multiset.Entry) obj;
Collection<V> collection = Keys.this.a.asMap().get(entry.a());
return collection != null && collection.size() == entry.getCount();
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean isEmpty() {
return Keys.this.a.isEmpty();
}
@Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set
public Iterator<Multiset.Entry<K>> iterator() {
return Keys.this.entryIterator();
}
@Override // com.google.common.collect.Multisets.EntrySet, java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean remove(Object obj) {
if (!(obj instanceof Multiset.Entry)) {
return false;
}
Multiset.Entry entry = (Multiset.Entry) obj;
Collection<V> collection = Keys.this.a.asMap().get(entry.a());
if (collection == null || collection.size() != entry.getCount()) {
return false;
}
collection.clear();
return true;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public int size() {
return Keys.this.distinctElements();
}
}
Keys(Multimap<K, V> multimap) {
this.a = multimap;
}
@Override // com.google.common.collect.AbstractMultiset, java.util.AbstractCollection, java.util.Collection
public void clear() {
this.a.clear();
}
@Override // com.google.common.collect.AbstractMultiset, java.util.AbstractCollection, java.util.Collection, com.google.common.collect.Multiset
public boolean contains(Object obj) {
return this.a.containsKey(obj);
}
@Override // com.google.common.collect.AbstractMultiset, com.google.common.collect.Multiset
public int count(Object obj) {
Collection collection = (Collection) Maps.e(this.a.asMap(), obj);
if (collection == null) {
return 0;
}
return collection.size();
}
@Override // com.google.common.collect.AbstractMultiset
Set<Multiset.Entry<K>> createEntrySet() {
return new KeysEntrySet();
}
@Override // com.google.common.collect.AbstractMultiset
int distinctElements() {
return this.a.asMap().size();
}
@Override // com.google.common.collect.AbstractMultiset, com.google.common.collect.Multiset
public Set<K> elementSet() {
return this.a.keySet();
}
@Override // com.google.common.collect.AbstractMultiset
Iterator<Multiset.Entry<K>> entryIterator() {
return new TransformedIterator<Map.Entry<K, Collection<V>>, Multiset.Entry<K>>(this, this.a.asMap().entrySet().iterator()) { // from class: com.google.common.collect.Multimaps.Keys.1
/* JADX INFO: Access modifiers changed from: package-private */
@Override // com.google.common.collect.TransformedIterator
public Multiset.Entry<K> a(final Map.Entry<K, Collection<V>> entry) {
return new Multisets.AbstractEntry<K>(this) { // from class: com.google.common.collect.Multimaps.Keys.1.1
@Override // com.google.common.collect.Multiset.Entry
public K a() {
return (K) entry.getKey();
}
@Override // com.google.common.collect.Multiset.Entry
public int getCount() {
return ((Collection) entry.getValue()).size();
}
};
}
};
}
@Override // com.google.common.collect.AbstractMultiset, java.util.AbstractCollection, java.util.Collection, java.lang.Iterable
public Iterator<K> iterator() {
return Maps.a(this.a.entries().iterator());
}
@Override // com.google.common.collect.AbstractMultiset, com.google.common.collect.Multiset
public int remove(Object obj, int i) {
CollectPreconditions.a(i, "occurrences");
if (i == 0) {
return count(obj);
}
Collection collection = (Collection) Maps.e(this.a.asMap(), obj);
if (collection == null) {
return 0;
}
int size = collection.size();
if (i >= size) {
collection.clear();
} else {
Iterator it = collection.iterator();
for (int i2 = 0; i2 < i; i2++) {
it.next();
it.remove();
}
}
return size;
}
}
public static <K, V> ListMultimap<K, V> a(Map<K, Collection<V>> map, Supplier<? extends List<V>> supplier) {
return new CustomListMultimap(map, supplier);
}
public static <K, V> SetMultimap<K, V> b(Map<K, Collection<V>> map, Supplier<? extends Set<V>> supplier) {
return new CustomSetMultimap(map, supplier);
}
static boolean a(Multimap<?, ?> multimap, Object obj) {
if (obj == multimap) {
return true;
}
if (obj instanceof Multimap) {
return multimap.asMap().equals(((Multimap) obj).asMap());
}
return false;
}
}