对于LinkedHashMultiMap,按顺序迭代特定键的所有值

时间:2016-12-20 16:16:18

标签: java guava

我想按插入顺序遍历LinkedHashMultiMap<String,String>(番石榴)的特定键的值。

这可能吗?如果是这样,怎么样?

为何选择LinkedHashMultiMap?好吧,我现有的数据结构是HashMultiMap,我想我是否将其更改为LinkedHashMultiMap,这将与我现有的代码兼容,我可以以某种方式迭代这些值。

但是看一下这些文档,我无法弄清楚 - 那就是说,我是LinkedHashMultiMap类的新手。

2 个答案:

答案 0 :(得分:3)

LinkedHashMultimap is a documented behavior

的广告订单排序
  

Multimap的实现,它不允许重复的键值条目,并返回其迭代器遵循将数据添加到多图的顺序的集合。

并且开箱即用,请参阅wiki page on Multimap implementations

| Implementation       | Keys behave like... | Values behave like.. |
|:---------------------|:--------------------|:---------------------|
| LinkedHashMultimap** | LinkedHashMap       | LinkedHashSet        |

`**` `LinkedHashMultimap` preserves insertion order of entries,  
as well as the insertion order of keys, and the set of values associated with any one key.

代码示例:

LinkedHashMultimap<String, String> m = LinkedHashMultimap.create();

m.put("a", "foo");
m.put("b", "bar");
m.put("a", "baz");

m.get("a").forEach(System.out::println); // outputs "foo" and "baz"

答案 1 :(得分:2)

只需使用get,然后在for-each循环中迭代生成的Set

for (String value : multimap.get(key)) {

}

集合的迭代器将按Multimap指定的get的顺序迭代。

  

同样,removeAllreplaceValuesArray(100)会返回按照添加顺序迭代值的集合。