【问题标题】:Hashmap - iterating and getting the ouput printed too many timesHashmap - 迭代并打印太多次输出
【发布时间】:2020-07-27 07:27:25
【问题描述】:

在下面的代码中 contains_All hashmap 为每次迭代放置键和值。 在 for 循环之后,我再次单击下一个按钮,将名称和状态放入 hashmap 所以我的 hashmap 应该包含每个页面的所有值。 但是当我打印哈希图时 我得到了 4 个列表

  1. 1 页的键和值。
  2. 2页的键值和1页 3.第3页的键值与1和2一起
  3. 4个页面的键值以及之前的全部

现在,当我迭代地图时,我得到了太多的值,因为它正在打印 1、2、3 和 4 但我只想要包含所有内容的 4 个

public static validate()

{ 
get value();
    while (utils.isElementDisplayed(next)) {

            utils.waitForElement(next, 20);
            utils.click(next);
            getValue();

        }

public getValue{
for (int i = 0; i < allRows.size(); i++) {

            names = ds_name.get(i).getText();
            seName = ds_server.get(i).getText();
            state = ds_state.get(i).getText();
            String names_seName = name_ds.concat("_" + serverName_ds);

            containsAll.put(names_seName, state);

        }

        System.out.println(containsAll);
        Iterator it = containsAll.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry ent = (Map.Entry) it.next();

            System.out.println("-----------------------------------------------------------");
            System.out.println(ent.getKey() + "= " + ent.getValue());
            Reporter.log("-----------------------------------------------------------");
            Reporter.log(ent.getKey() + "=  " + ent.getValue());

        }
}

【问题讨论】:

  • 首先想到的是,您一直在填充containsAll 哈希图,而从未从中删除任何内容。所以首先用第 1 页填充它,然后添加第 2 页,依此类推。当然,它将保留所有以前的值。解决方案:清除 hashmap 或每页新建一个。
  • @Fullslack.dev 我怎样才能删除这些东西并只获取包含所有值的最后一个。我不想为所有页面制作新的 Hahmaps
  • 如果你只在for loop 中使用hashmap,我也会将声明移到那里。在 clearingremoving values 在 hashmap 中我会看看这个:stackoverflow.com/questions/2811537/…
  • @Fullslack.dev 我清除了哈希图,但现在我只得到了 4 页的值但我想要所有页面的值一起
  • 好的,我希望我现在能理解这个问题(双 3. 的表述很糟糕,并且对 4. 的引用不存在)。所以你想看到这个打印正确的The key value of 4 pages along with previous all。为此,请返回您的原始代码(忘记我以前的 cmets)并将Iterator it = containsAll.entrySet().iterator(); 和后续代码块移出for loop。让我知道这是否有效。

标签: java collections hashmap


【解决方案1】:

为了显示The key value of 4 pages along with previous all,您需要将显示 代码块移到for 循环 之外。在这种情况下,它是以Iterator it = containsAll.entrySet().iterator(); 开头的代码块。

完整的代码示例:

public static validate() { 
    get value();
    while (utils.isElementDisplayed(next)) {
        utils.waitForElement(next, 20);
        utils.click(next);
        getValue();
    }

public getValue {
    for (int i = 0; i < allRows.size(); i++) {

        names = ds_name.get(i).getText();
        seName = ds_server.get(i).getText();
        state = ds_state.get(i).getText();
        String names_seName = name_ds.concat("_" + serverName_ds);

        containsAll.put(names_seName, state);
        System.out.println(containsAll);
    }
    
    Iterator it = containsAll.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry ent = (Map.Entry) it.next();
        System.out.println("-----------------------------------------------------------");
        System.out.println(ent.getKey() + "= " + ent.getValue());
        Reporter.log("-----------------------------------------------------------");
        Reporter.log(ent.getKey() + "=  " + ent.getValue());
    }
}

之所以有效而原始代码无效,是因为您填充了哈希图并打印了它。在这样做时,您打印 page 1,然后打印 page 1 & 2,然后 page 1,2 & 3,最后打印 page 1, 2,3 & 4。将打印移出 for 循环 只会打印完成的 hashmap。

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多