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的详细解释。如果我遇到任何问题,我会再打给你的。再来一个。在您的情况下,可能需要切换外部循环和内部循环。这是因为您需要元素
对象作为键,在切换之后,将更容易获得它们