package org.aksw.jena_sparql_api.concept.builder.impl;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.IntStream;
public class NamedList<K, V>
implements Iterable<Entry<K, V>>
{
protected List<V> values;
protected Map<Integer, K> iToK;
protected Map<K, V> kToV;
public NamedList() {
this.values = new ArrayList<>();
this.iToK = new HashMap<>();
this.kToV = new HashMap<>();
}
public void add(V value) {
values.add(value);
}
public void add(K key, V value) {
if(kToV.containsKey(key)) {
throw new RuntimeException("Key " + key + " already exists");
}
int i = values.size();
kToV.put(key, value);
iToK.put(i, key);
values.add(value);
}
public V get(K key) {
V result = kToV.get(key);
return result;
}
@Override
public Iterator<Entry<K, V>> iterator() {
Iterator<Entry<K, V>> result = IntStream.range(0, values.size())
.mapToObj(i -> {
K k = iToK.get(i);
V v = values.get(i);
Entry<K, V> r = new SimpleEntry<>(k, v);
return r;
})
.iterator();
return result;
}
}