[英]Java how to iterate through 3 arrayList
我創建了三個ArrayList
,並向它們添加了一些值。 然后,我遍歷每個ArrayList
並希望根據if語句的條件更新值。 以下是我到目前為止已實現的代碼,但未提供預期的輸出:
List<String> columnNameList = new ArrayList<String>();
List<String> columnTypeList = new ArrayList<String>();
List<Integer> columnLengthList = new ArrayList<Integer>();
String result = "";
columnNameList.add("Id");
columnNameList.add("Name");
columnNameList.add("Address");
columnTypeList.add("char");
columnTypeList.add("varchar");
columnTypeList.add("varchar");
columnLengthList.add(18);
columnLengthList.add(50);
columnLengthList.add(10000);
outermostloop:
for (String name : columnNameList)
{
outerloop:
for (String type : columnTypeList)
{
loop:
for (int len : columnLengthList)
{
if(len > 0 && (!type.equalsIgnoreCase("int") && !type.equalsIgnoreCase("datetime") && !type.equalsIgnoreCase("datetime2")))
{
if(len > 8000 && !(name.equalsIgnoreCase("Id")) && (type.equalsIgnoreCase("varchar")))
{
result = name + " " + type + "(max) ";
System.out.println("if len > 8000 && name not id and type is varchar-> " + result);
// O/P expected : Address varchar(max)
}
else
{
String finalres = name + " " + type + "(" + len + ") ";
System.out.println("No conversion " + finalres);
/* O/P expected : Id char(18)
Name varchar(50)
*/
}
}
break outerloop;
}
}
}
List<String> columnNameList = new ArrayList<String>();
List<String> columnTypeList = new ArrayList<String>();
List<Integer> columnLengthList = new ArrayList<Integer>();
String result = "";
columnNameList.add("Id");
columnNameList.add("Name");
columnNameList.add("Address");
columnTypeList.add("char");
columnTypeList.add("varchar");
columnTypeList.add("varchar");
columnLengthList.add(18);
columnLengthList.add(50);
columnLengthList.add(10000);
/* outermostloop: for (String name : columnNameList) {
* outerloop: for (String type : columnTypeList) {
* loop: for (int len : columnLengthList) {
*/
for (int i = 0; i < columnNameList.size(); i++)
{
for (i = 0; i < columnTypeList.size(); i++)
{
for (i = 0; i < columnLengthList.size(); i++)
{
if(columnLengthList.get(i) > 0 && (!columnTypeList.get(i).equalsIgnoreCase("int") && !columnTypeList.get(i).equalsIgnoreCase("datetime") && !columnTypeList.get(i).equalsIgnoreCase("datetime2")))
{
if(columnLengthList.get(i) > 8000 && !(columnNameList.get(i).equalsIgnoreCase("Id")) && (columnTypeList.get(i).equalsIgnoreCase("varchar")))
{
result = columnNameList.get(i) + " " + columnTypeList.get(i) + "(max) ";
System.out.println("if len > 8000 && name not id and type is varchar " + result);
// O/P expected : Address varchar(max)
}
else
{
String finalres = columnNameList.get(i) + " " + columnTypeList.get(i) + "(" + columnLengthList.get(i) + ") ";
System.out.println("No conversion " + finalres);
/* O/P expected : Id char(18)
Name varchar(50)
*/
}
}
}
}
}
電流輸出:
No conversion Id char(18) No conversion Name char(18) No conversion Address char(18)
預期產量:
No conversion Id char(18) No conversion Name varchar(50) if len > 8000 && name not id and type is varchar -> Address varchar(max)
我想我在break
時做錯了什么。 誰能讓我知道當前代碼有什么問題,或者我缺少什么?
由於循環的結構,它不起作用。 outsidemostloop以“ Id”開頭。 outsideloop以“ char”開頭。 循環從18開始。現在,您的if子句得到評估。 之后,您將中斷outerloop。 現在,outermostloop轉到“名稱”。 但是,outerloop再次使用“ char”從頭開始。 循環也一樣。
您可以將當前循環替換為
for(int i = 0; i < columnNameList.size(); i++){
然后替換:
name --> columnNameList.get(i)
type --> columnTypeList.get(i)
len --> columnLengthList.get(i)
另一個選擇是將所有三個參數包裝到您自己的類中,然后遍歷該類的ArrayList。 例:
private class Column{
public String name;
public String type;
public int len;
public Column(String name, String type, int len){
this.name=name;
this.type=type;
this.len=len;
}
}
然后使用
ArrayList<Column> columns
和
columns.add(new Column("Id","Char",18));
等等...訪問替換
name --> column.name
使用循環時
for(Column column: columns){
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.