package org.tenidwa.collections.utils;
import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author Georgy Vlasov (suseika@tendiwa.org)
* @version $tendiwa-version$
* @since 0.3
*/
public final class ZippedMap<K, V> implements Map<K, V> {
private final Map<K, V> delegate;
public ZippedMap(final List<K> keys, final List<V> values)
throws Exception {
if (keys.size() != values.size()) {
throw new Exception(
String.format(
"Keys size (%s) and values size (%s) must be the same",
keys.size(),
values.size()
)
);
}
this.delegate = ZippedMap.createMap(keys, values);
}
private static <K, V> Map<K, V> createMap(
final List<K> keys,
final List<V> values
) {
final int size = keys.size();
final ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
for (int i=0; i< size; i++) {
builder.put(keys.get(i), values.get(i));
}
return builder.build();
}
@Override
public int size() {
return this.delegate.size();
}
@Override
public boolean isEmpty() {
return this.delegate.isEmpty();
}
@Override
public boolean containsKey(Object o) {
return this.delegate.containsKey(o);
}
@Override
public boolean containsValue(Object o) {
return this.delegate.containsValue(o);
}
@Override
public V get(Object o) {
return this.delegate.get(o);
}
@Override
public V put(K k, V v) {
throw new UnsupportedOperationException();
}
@Override
public V remove(Object o) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(Map<? extends K, ? extends V> map) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
@Override
public Set<K> keySet() {
return this.delegate.keySet();
}
@Override
public Collection<V> values() {
return this.delegate.values();
}
@Override
public Set<Entry<K, V>> entrySet() {
return this.delegate.entrySet();
}
}