簡體   English   中英

代碼未按預期工作。 在我的 Selenium Webdriver Java 代碼中使用 ArrayList 和 for 循環

[英]Code not working as expected. Using ArrayList and for loop in my Selenium Webdriver Java code

因此,我最近開始使用 Java 開發 Selenium Webdriver。 下面是代碼:

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);

我創建了 String 的 lineUITextList ArrayList。 該數組將始終只有 1 個值。 所以上面的問題 for 循環不起作用。 該循環只執行一次並輸出打印 LineDashboardDetailList。 machineUITextList 數組中有大約 5-6 個值。 我的期望是讓 LineDashboardDetailList 使 lineUITextList 通用值與 machineUITextList 的每個新值配對。 例如,如果 lineUITextList= {"Noun"} machineUITextList= {"Pen","Box","Note","Scale"}

所以我的列表,即 LineDashboardDetailList 應該給我 output 為:名詞,筆名詞,盒子名詞,注名詞,比例

我在我的代碼中進一步使用 LineDashboardDetailList List。 提前致謝。

我不完全確定您要達到的目標。 就個人而言,我會使用 java.util.Map 將machineUITextList的每個值與lineUITextList的值列表相關聯。
但是,為了幫助您實現目標,首先,我將設計LineDashboardDetails class 以保持machineUITextList的單個值以及lineUITextList的列表,以便您可以使用特定方法將它們組合起來。 這在封裝、責任分配等方面有很多優勢,而且您始終可以將其重用於其他目的。
利用 Java stream 和內置功能接口,可以輕松實現 function 組合值。
這是LineDashboardDetails class 的代碼:

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());
    }
}

這是您嘗試實現的代碼,它使用上面的 class 並將兩個列表組合在一起,最后按您的預期打印出值列表。 你可以看到,我在 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方法,但我以某種方式保留了您的原始版本,以便讓您了解我圍繞您的代碼實現的想法。

這是我得到的 output:

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

隨時要求任何澄清。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM