代码未按预期工作在selenium webdriver java代码中使用arraylist和for循环

zzzyeukh  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(331)

因此,我最近开始使用java开发seleniumwebdriver。代码如下:

List<LineDashboardDetails> LineDashboardDetailList = new ArrayList<LineDashboardDetails>();

        LineDashboardDetails objLineDetail = new LineDashboardDetails();

        for (int i = 0; i < lineUITextList.size(); i++) {
            objLineDetail.lineName=lineUITextList.get(i);
            objLineDetail.machineNames = machineUITextList.get(i).toString();
            LineDashboardDetailList.add(objLineDetail);
        }

        System.out.println(LineDashboardDetailList);

我已经创建了一个字符串的lineuitextlist arraylist。此数组中始终只有一个值。所以问题就在上面,因为循环不起作用。循环只执行一次并输出以打印linedashboarddetaillist。machineuitextlist数组中大约有5-6个值。我的期望是具有linedashboarddetaillist,以便lineuitextlist公共值与machineuitextlist的每个新值成对出现。例如,如果lineuitextlist={“noun”}machineuitextlist={“pen”,“box”,“note”,“scale”}
所以我的列表,即linedashboarddetaillist应该给我输出:noun,pen noun,box noun,note noun,scale
我正在代码中进一步使用linedashboarddetaillist。提前谢谢。

9cbw7uwe

9cbw7uwe1#

我不太清楚你想得到什么。我个人会使用java.util.map来关联 lineUITextList 包含 machineUITextList .
然而,为了帮助你实现你的目标,首先,我会设计 LineDashboardDetails 类以保持 lineUITextList ,以及 machineUITextList ,以便您可以使用特定的方法将它们组合起来。这在封装、责任分配等方面有很多优势,而且您可以随时为其他目的重用。
通过利用java流和内置函数接口,可以很容易地实现组合这些值的函数。
这是密码 LineDashboardDetails 班级:

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class LineDashboardDetails {
    private String lineName;
    private List<String> machineNames;

    public String getLineName() {
        return lineName;
    }

    public void setLineName(String lineName) {
        this.lineName = lineName;
    }

    public List<String> getMachineNames() {
        return new ArrayList<>(machineNames);
    }

    public void setMachineNames(List<String> machineNames) {
        this.machineNames = new ArrayList<>(machineNames);
    }

    public List<String> getCombinedList() {
        return  machineNames.stream()
                            .map(s -> lineName + "," + s)
                            .collect(Collectors.toList());
    }
}

这里是您尝试实现的代码,它使用上面的类并组合两个列表,最后按您的期望打印出值列表。您可以看到,我在main方法中准备了两个简单的列表,但是您可以根据自己的需要进行概括:

import java.util.List;
import java.util.ArrayList;

public class SeleniumWebdriverListTest {

    public List<LineDashboardDetails> combineUITextListWithMachineUIText(List<String> lineUITextList,
                                                                         List<String> machineUITextList) {

        List<LineDashboardDetails> lineDashboardDetailList = new ArrayList<>();

        for (String lineUIText : lineUITextList) {
            LineDashboardDetails objLineDetail = new LineDashboardDetails();
            objLineDetail.setLineName(lineUIText);
            objLineDetail.setMachineNames(machineUITextList);
            lineDashboardDetailList.add(objLineDetail);
        }

        return lineDashboardDetailList;
    }

    public static void main(String[] args) {
        List<String> lineUITextList = new ArrayList<>();
        lineUITextList.add("Noun");

        List<String> machineUITextList = new ArrayList<>();
        machineUITextList.add("Pen");
        machineUITextList.add("Box");
        machineUITextList.add("Note");
        machineUITextList.add("Scale");

        List<LineDashboardDetails> lineDashboardDetailList =
                new SeleniumWebdriverListTest().combineUITextListWithMachineUIText(
                        lineUITextList, machineUITextList);

        lineDashboardDetailList.stream()
                               .map(s -> s.getCombinedList())
                               .forEach(System.out::println);
    }
}

我可以使用java流和一个特定的lamba表达式来实现 combineUITextListWithMachineUIText 方法,但我以某种方式保留了您的原始版本,以便让您了解我对代码实现的想法。
下面是我得到的结果:

[Noun,Pen, Noun,Box, Noun,Note, Noun,Scale]

请随时澄清。

相关问题