Java Stream:组合地图中的元素

时间:2017-04-27 22:55:56

标签: java java-8 java-stream multiset

我有一个Map<String, List<class1> > dict,这是我希望做的事情

Multiset<class1> dict1 = HashMutlset.create();
SetMultimap<class1, String> dict2 = HashMultimap.create();
for (Entry<String, List<class1>> entry : dict.entrySet()) {
   dict1.addAll(entry.getValue());
   for (class1 elem : entry.getValue()) {
       dict2.put(elem, entry.getKey());
   }
}

我希望将所有class1对象放在Multiset的列表中,并反向查找class1对象及其键。

有没有办法用流编写等效代码?

1 个答案:

答案 0 :(得分:3)

ImmutableSetMultimap<class1, String> dict2 = dict.entrySet().stream()
   .collect(ImmutableSetMultimap.flatteningToImmutableSetMultimap(
      entry -> entry.getKey(),
      entry -> entry.getValue().stream()))
   .inverse();
ImmutableMultiset<class1> dict1 = dict2.keys();

通常,使用Stream.forEach将东西放入集合中是一种反模式。