Java 用番石榴变换地图

Java 用番石榴变换地图,java,guava,Java,Guava,我有一个组对象,它有如下元素列表 class Group { List<E> elements; public List<E> getElements() { return elements; } } 类组{ 列出要素; 公共列表getElements(){return elements;} } 我的地图对象表示如下 Map<Group, Double> groups = with some values.... Map<Eleme

我有一个组对象,它有如下元素列表

class Group {
    List<E> elements;
    public List<E> getElements() { return elements; }
}
类组{
列出要素;
公共列表getElements(){return elements;}
}
我的地图对象表示如下

Map<Group, Double> groups = with some values....
Map<Element, Double> elementVal = with some values....
Map group=带有一些值。。。。
我有另一张地图,如下所示

Map<Group, Double> groups = with some values....
Map<Element, Double> elementVal = with some values....
Map elementVal=带有一些值。。。。
我的最后一张地图应该是

Map<Element, Double> = with some values
Map=带有一些值
其中,值是元素组值(
groups
map)*元素值(
elementVal
map)的乘积

我正在寻找地图转换,最好使用
Guava
或任何其他更干净的方法,而不是分解地图

谢谢。

所以

带整洁环的版本

@Test public void multiplyMaps() { Element e1 = new Element(1.); Element e2 = new Element(2.); Element e3 = new Element(3.); Element e4 = new Element(4.); Map elementVal = new HashMap(); elementVal.put(e1, e1.d); elementVal.put(e2, e2.d); elementVal.put(e3, e3.d); elementVal.put(e4, e4.d); Group g12 = new Group(Lists.newArrayList(e1, e2)); Group g23 = new Group(Lists.newArrayList(e2, e3)); Group g34 = new Group(Lists.newArrayList(e3, e4)); Map groups = new HashMap(); groups.put(g12, e1.d + e2.d); groups.put(g23, e2.d + e3.d); groups.put(g34, e3.d + e4.d); for (final Map.Entry groupEntry : groups.entrySet()) { for (Map.Entry elementValEntry : elementVal.entrySet()) { System.out.println(groupEntry.getValue() + "*" + elementValEntry.getValue()); } } } 最后我们得到了iterable对象包含乘法结果


当然,这并不能解决您的问题,因为您需要应用另一个转换,从
对象
获取结果,并将它们与
元素
匹配。这并不难,因为您应该只将字符串更改为某种
条目
(对象对)。

元素
的关系是什么?地图的大小总是一样的吗?键是否已排序?一个
元素是否可以是多个
组的成员?如果是这种情况,应该使用什么操作进行聚合?因此,您希望将每个
组中的每个
元素
相乘。来自
组的元素
乘以
elementVal
中的每个
元素
?您更喜欢番石榴。@reto,这个组包含元素列表。组映射和元素的大小将不同。例如,我有100个元素。然后我将对这些元素进行分组并创建10个组。@Boris,元素只能是一个组的一部分。非常感谢Koziolek的详细解释。如果我遇到任何问题,我会再打给你的。再来一个。在您的情况下,可能需要切换外部循环和内部循环。这是因为您需要
元素
对象作为键,在切换之后,将更容易获得它们