Java 从HashMap初始化EnumMap
我发现可以使用另一个HashMap的值初始化java EnumMap,但这是通过测试实现的。我不需要使用有效的双括号或类似的东西,我只需要从给定的贴图创建贴图Java 从HashMap初始化EnumMap,java,junit,Java,Junit,我发现可以使用另一个HashMap的值初始化java EnumMap,但这是通过测试实现的。我不需要使用有效的双括号或类似的东西,我只需要从给定的贴图创建贴图 public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) { EnumMap<ITEMS, Map<String, Double>
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;
}
返回相同的字符串结果,但由于从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;
}
公共EnumMap getPromotionItems(字符串状态,映射价格){
EnumMap promoItems=新的EnumMap(ITEMS.class);
promotItems.put(ITEMS.valueOf(state),新的HashMap(prices));
退货项目;
}
您混淆了数据类型。您正在将条目用作字符串。如果使用正确的泛型值定义数据类型,将出现编译错误:
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;
}
公共EnumMap getPromotionItems(字符串状态,映射价格){
EnumMap promoItems=新的EnumMap(ITEMS.class);
迭代器迭代器=prices.entrySet().Iterator();
迭代器键=prices.keySet().Iterator();
HashMap=newHashMap();
while(keys.hasNext()){
put(iterator.next(),keys.next());
}
promotItems.put(ITEMS.valueOf(state),map);
退货项目;
}
更改:
assertSame
致:
assertSame()
与=
相同,而assertEquals()
进行equals()
比较。不要使用原始类型。@shmosel现在尝试编译时进行了编辑,看看您的想法。我不确定您更改了什么,但迭代器
,键
和映射
都使用原始类型;显然,您不希望使用可用的EnumMap
copy构造函数,但这似乎是在子映射中出现键冲突时随机选取最终值。您不应该在此处发布测试代码吗?编辑仍然提供了我得到的结果。再次尝试运行它@David Perez Cabrererez Cabrera这个解决方案是我开始使用的,但问题是JUnit。这些结果不应该显示断言Error.Perez Cabrera我将测试与我正在使用的枚举映射一起添加,以便您可以看到断言是什么。我还使用.equals()对“AssertSame”和“AssertTrue”进行了尝试,得到了相同的结果。@April\u Nara您必须将AssertSame更改为assertEquals,正如Bohemian所说。equals似乎是我正在寻找的对象比较,正如您所看到的,上面的结果对这两个对象都完全相同。断言错误的预期结果和实际结果如何相同?
assertSame
assertEquals