Java Stream:组合地图中的元素
Java Stream: combine elements in a map
我有一个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对象及其键。
有什么方法可以使用流编写等效代码吗?
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
将东西放入集合是一种反模式。
我有一个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对象及其键。
有什么方法可以使用流编写等效代码吗?
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
将东西放入集合是一种反模式。