我已经发现可以使用另一个HashMap的值来初始化java EnumMap,但这是通过测试进行的。我不需要使用高效的双括号或类似的东西,我只需要从给定的地图创建地图即可。
public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) {
EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class);
Iterator iterator = prices.entrySet().iterator();
Iterator keys = prices.keySet().iterator();
HashMap map = new HashMap<String, Double>();
while(keys.hasNext()) {
map.put(iterator.next(),keys.next());
}
promoItems.put(ITEMS.valueOf(state),map);
return promoItems;
}
我在Junit中写东西,这说明我的迭代器有某种错误
java.lang.AssertionError: expected: java.util.EnumMap<{ORIGINAL={ProductC=3.0, ProductA=1.0, ProductB=2.0}}> but was: java.util.EnumMap<{ORIGINAL={ProductC=3.0, ProductA=1.0, ProductB=2.0}}>
解
我只需要在我的类中使用一个enumMap,并使用测试类enumMap调用该方法进行单元测试。
这是在我的测试类中:TestClassForItems.java
公共枚举项{
促销,原始,促销
}
@Test
public void onRedLinePromotionListOriginalPriceTest() {
testPromoState = "ORIGINAL";
testPrices.put("Product_A", 1.00);
testPrices.put("Product_B", 2.00);
testPrices.put("Product_C", 3.00);
expectedPrices = testPrices;
expectedGoodsMap.put(TestClassForItems.ITEMS.ORIGINAL, testPrices);
assertSame(expectedGoodsMap, TestClass.getPromotionItems(TestClassForItems.ITEMS.ORIGINAL,testPrices));
}
返回相同的String结果,但由于从main实例化了用于运行Junit测试的所有必需属性而导致的对象用法不同。
最佳答案
一个简短的解决方案:
public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) {
EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class);
promoItems.put(ITEMS.valueOf(state), new HashMap<>(prices));
return promoItems;
}
您已经混淆了数据类型。您正在使用条目作为字符串。如果使用正确的通用值定义数据类型,则会出现编译错误:
public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) {
EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class);
Iterator<Entry<String, Double>> iterator = prices.entrySet().iterator();
Iterator<String> keys = prices.keySet().iterator();
HashMap<String, Double> map = new HashMap<String, Double>();
while (keys.hasNext()) {
map.put(iterator.next(), keys.next());
}
promoItems.put(ITEMS.valueOf(state), map);
return promoItems;
}