[英]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.