【问题标题】:fill an HashMap with elements of a set passed as parameter用作为参数传递的集合的元素填充 HashMap
【发布时间】:2017-05-28 14:19:50
【问题描述】:

我要写方法:

    public Map<Robot, Integer> PickedUpForEachRobot(Set<Stuff> pickedUp) 

它必须遍历作为参数传递的集合,并且必须计算每个机器人拾取的东西的数量并将其关联到他的实例。

我所做的是这样的:

public Map<Robot, Integer> PickedUpForEachRobot(Set<Stuff> pickedUp) {
    final Map<Robot,Integer> map = new HashMap<>();
    for(Stuff stuff : pickedUp){
        Integer quantity = map.get(stuff.getPicker());
        if(quantity!=null){
            map.put(stuff.getPicker(), quantity);
        }
    }
    return map;

}

我还有其他的课:

public class Stuff {

private Robot picker;

public Robot getPicker() {
    return this.picker;
}

}

和:

public class Robot {

private Set<Stuff> bunchOfStuff;

public Set<Stuff> getBunchOfStuff() {
    return this.bunchOfStuff;
}

}

我试图合成,所以我希望我能清楚。

所以我的问题是,当我对此方法进行测试时:

@Test
public void testRaccoltoPerMezzo() {
    Statistics stats = new Statistics();
    Stuff stuff1 = new ball();
    Stuff stuff2 = new legoPiece();
    Set<Stuff> set = new HashSet<>();
    set.add(stuff1);
    assertEquals(1,set.size());
    Map<Robot,Integer> map = new HashMap<>();
    map.put(stuff1.getPicker(),1);

    assertEquals(map, stats.PickedUpForEachRobot(set));

}

它失败了,它对我说:

java.lang.AssertionError: expected:<{null=1}> but was:<{}>

我不明白为什么。有人可以帮帮我吗?

【问题讨论】:

    标签: java unit-testing hashmap hashset


    【解决方案1】:

    这条消息:

    java.lang.AssertionError: 预期: 但是是:

    意味着您希望拥有一个地图,其中一个元素拥有 null 键和关联值 1,但您得到的是一个空地图。

    根据您的要求和实际地图,您创建的预期地图似乎并不足够。 关于在实现中填充地图,我至少注意到这一点完全不合逻辑。

    这里:

    final Map<Robot,Integer> map = new HashMap<>();
    for(Stuff stuff : pickedUp){
        Integer quantity = map.get(stuff.getPicker());
        if(quantity!=null){
            map.put(stuff.getPicker(), quantity);
        }
    }
    

    Integer quantity = map.get(stuff.getPicker()); 将始终将数量值设为 null,因为您从空地图中获取它:map = new HashMap&lt;&gt;();,并且仅当数量不是 null 时才填充地图:

    if(quantity!=null){
          map.put(stuff.getPicker(), quantity);
     }
    

    但它永远不会发生,因为地图是空的:所以你永远不会填充地图。

    您的代码中可能还有其他问题,但我希望它能帮助您重新编写逻辑。

    【讨论】:

    • 首先感谢您的回答。您对如何解决这种情况有任何想法吗?我问它是因为我已经知道那条线总是返回 null,但我一直坚持这个方法太久试图解决这个问题
    • 不客气。我不确定是否了解您的需求。我认为在 PickedUpForEachRobot() 中,想法是迭代 Set of Stuff 并获取选取器的数量。然后用这个数量更新地图。但问题是我在你的模型中看不到数量。
    • 您认为问题可能在于我必须用 Stuff 元素填充作为参数传递的集合吗?因为当我做 stuff.getPicker() 它总是给我 null。
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多