如何将具有相同键的值组合到hashMap中的一个值中?

时间:2017-02-23 19:56:42

标签: java arrays object hashmap

我的任务是遇到以下问题:给定一个IngredientPortions数组(我做的一个对象),如果IngredientPortions中的两个元素是相同的成分(成分是另一个成分是IngredientPortion对象的组成部分),我我应该结合IngredientPortion元素。

例如,如果我给出的IngredientPortion数组有两个元素,例如1.5盎司的avacodo部分和2.0盎司的另一个鳄梨部分,我应该生成1个元素的新的IngredientPortion数组:3.5的鳄梨盎司

我不确定如何做到这一点,但我正在考虑使用Strings的hashmap作为键,表示成分名称和IngredientPortion对象的值。如果hashmap已经有给定的ingredientPortion.getName()的密钥,我会为该密钥输入该特定的ingredientPortion,但我不确定如何组合ingredientPortion数量。它会自动组合它还是将它作为两个不同的成分存储在一个键下?提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果您的hashmap正在存储值,那么您可以使用它来填充值。无论它是第一个成分(即它不在地图中)还是第二个成分(需要添加到地图中已有的值中),这都有效:

map.put(ingredientKey, map.getOrDefault(ingredientKey, 0.0) + ingredientAmount);

答案 1 :(得分:0)

  

我不知道如何做到这一点,但我正在考虑使用Strings的hashmap作为键,表示成分名称和IngredientPortion对象的值。

到目前为止听起来不错。

  

如果hashmap已经有一个给定的ingredientPortion.getName()的密钥,我会为该密钥输入该特定的ingredientPortion,但我不确定如何组合ingredientPortion数量。它会自动组合它还是将它作为两个不同的成分存储在那个键下?

显然,在处理名称尚未作为地图中的关键字注册的IngredientPortion时,没有问题。但是,当密钥已经注册时,将新值放入具有相同密钥的映射中将简单地替换分配给该密钥的先前值,而不是以某种方式组合这些值。 The documentation for the Map interface应该明确这一点。

实际上,你怎么能希望Map在这样做时自动组合值,甚至是否可能这样做取决于值的类型?听起来像可能不确定如何形成这样的组合。如果是这样,那么确定这一点必须是你的首要任务。这又是一个特定于该类型的问题,因此我们无法就细节提供建议。

一旦您知道如何以合适的方式组合这些对象,就可以使用。例如,在地图中查找每个名称,并根据是否找到它,插入或替换其值。