假设我有hashmap
,密钥为String
,值也为String
。我想为某个key
元素范围提取地图sublist
的子列表(与List
values
函数一样)。
怎么可以实现呢?
答案 0 :(得分:3)
正如我在评论中所说,我不会选择HashMap
,而是使用SortedMap
代替(每个例子TreeMap
),其中subMap
方法:
subMap(K fromKey, K toKey)
返回此映射部分的视图,其键的范围为 fromKey,inclusive,to toKey,exclusive。
SortedMap<String, String> m = new TreeMap<>();
m.put("aaa","1");
m.put("bbb","2");
m.put("ccc","3");
m.put("ddd","4");
m.put("eee","5");
SortedMap<String, String> subM = m.subMap("a","d");
System.out.println(subM);
输出:
{aaa=1, bbb=2, ccc=3}
如果您只需要值列表,请使用values()
方法。
答案 1 :(得分:2)
这是一个非常天真的例子。
假设您有HashMap
,如下所示:
public Map<Integer, String> map = new HashMap<Integer, String>();
你说你要创建一个子列表,所以我假设你想要一个List<String>
作为输出:
public List<String> getKeyRange(Integer start, Integer end) {
List<String> list = new ArrayList<String>();
for (int i = start; i < end; i++) {
String value = map.get(i); //Forgot that string can be null in Java
if (value != null)
list.add(value);
}
return list;
}
答案 2 :(得分:-1)
<K, V> List<V> getAll(Map<K, V> map, Collection<K> keys)
{
List<V> values = new ArrayList<V>(keys.size());
for(K key : keys)
{
values.add(map.get(key));
}
return values;
}