【发布时间】:2009-11-18 17:08:06
【问题描述】:
我正在迭代并修改一个映射(由现有的一组枚举对象创建),如下所示:
public class Dispenser {
private Map<Ingredient, Integer> availableIngredients =
new EnumMap<Ingredient, Integer>(Ingredient.class);
public void orderSandwich(SandwichType sandwichType) {
Map<Ingredient, Integer> buffer =
new EnumMap<Ingredient, Integer>(availableIngredients);
for (Map.Entry<Ingredient, Integer> entry :
sandwichType.getIngredients().entrySet()) {
Integer currentUnits = buffer.get(entry.getKey());
buffer.put(entry.getKey(), currentUnits - entry.getValue());
}
availableIngredients.clear();
availableIngredients.putAll(buffer);
}
}
我想问一下在这种情况下是否需要临时的、方法本地的、buffer 集合。我的意思是,它可以正常工作,但不确定它的好处。我必须清除我的原始集合并将其替换为缓冲区集合的内容,这基本上是在循环中修改的实际映射。
由于没有缓冲区集合(仅使用我的原始集合),它可以正常工作,我想知道是否推荐一种方法而不是其他方法以及为什么。
非常感谢您就这方面的最佳做法提供任何建议。
【问题讨论】:
-
您的问题基本上是,“我正在像这样添加 2 和 2:2 + 3 + 2 - 3。它有效,但我不清楚添加和减去 3 的好处。”你真的没有解释为什么这看起来像是一开始就需要的。为什么不直接修改 availableIngredients 呢?我假设,从“玩具程序”的外观来看,您不关心多线程?顺便说一句,使用 google-collections.googlecode.com 中的 EnumMultiset 而不是 Map 似乎对您有所帮助,但我猜如果这是一个学校项目,这无关紧要。
标签: java collections enums map