如果其中一个Value为空,如何获取Java中的元组?索引越界
How to get the Tuples in Java, if one of the Value is empty? IndexOutOfBound
public class App {
public static void main(String[] args) {
List<Pair<String, String>> SubPartandMaster = new ArrayList<Pair<String, String>>();
List<String> wtpmList = new ArrayList<String>();
wtpmList.add("1");
wtpmList.add("2");
wtpmList.add("3");
wtpmList.add("4");
wtpmList.add("5");
List<String> wtpList = new ArrayList<String>();
wtpList.add("a");
wtpList.add("b");
wtpList.add("c");
System.out.println(wtpmList);
System.out.println(wtpList);
for (int i = 0; i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
}
}
我知道第二个列表没有更多值,但我想在这种情况下存储 null
。
例如
[(1,a),(2,b),(3,c),(4,null),(5,null)]
我得到的不是这个,而是错误
[1, 2, 3, 4, 5]
[a, b, c]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at App.main(App.java:28)
我知道原因,因为我无法从 wtpList 中检索更多内容,因为它有 3 个元素。
但如果值不存在,我可以存储 null。
您迭代了两个不同大小的列表:
for (int i = 0; i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
一个有五个元素,另一个有三个。这导致 java.lang.IndexOutOfBoundsException
尽快 i=3
.
I know the second list doesn't have more values but I want to store
null in that case. For example
假设 wtpmList 总是大于(或等于)wtpList,您可以简单地首先迭代最小的列表:
for (int i = 0; i < wtpList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
并在
之后添加空值
for (int i = wtpList.size(); i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), null));
}
如果不对列表做任何假设,那么您必须更改代码以涵盖所有情况。
int biggest_list = Math.max(wtpmList.size(), wtpList.size());
for (int i = 0; i < biggest_list; i++) {
if(i >= wtpmList.size())
SubPartandMaster.add(new Pair<String, String>(null, wtpList.get(i)));
else if (i >= wtpList.size())
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), null));
else
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
您可以重写 get
,使其像 poll
和 return 一样工作,如果没有元素存在则为空值:
List<String> wtpList = new ArrayList<String>() {
@Override
public String get( int idx ) {
return( idx < size() ? super.get( idx ) : null );
}
};
public class App {
public static void main(String[] args) {
List<Pair<String, String>> SubPartandMaster = new ArrayList<Pair<String, String>>();
List<String> wtpmList = new ArrayList<String>();
wtpmList.add("1");
wtpmList.add("2");
wtpmList.add("3");
wtpmList.add("4");
wtpmList.add("5");
List<String> wtpList = new ArrayList<String>();
wtpList.add("a");
wtpList.add("b");
wtpList.add("c");
System.out.println(wtpmList);
System.out.println(wtpList);
for (int i = 0; i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
}
}
我知道第二个列表没有更多值,但我想在这种情况下存储 null
。
例如
[(1,a),(2,b),(3,c),(4,null),(5,null)]
我得到的不是这个,而是错误
[1, 2, 3, 4, 5]
[a, b, c]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at App.main(App.java:28)
我知道原因,因为我无法从 wtpList 中检索更多内容,因为它有 3 个元素。 但如果值不存在,我可以存储 null。
您迭代了两个不同大小的列表:
for (int i = 0; i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
一个有五个元素,另一个有三个。这导致 java.lang.IndexOutOfBoundsException
尽快 i=3
.
I know the second list doesn't have more values but I want to store null in that case. For example
假设 wtpmList 总是大于(或等于)wtpList,您可以简单地首先迭代最小的列表:
for (int i = 0; i < wtpList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
并在
之后添加空值for (int i = wtpList.size(); i < wtpmList.size(); i++) {
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), null));
}
如果不对列表做任何假设,那么您必须更改代码以涵盖所有情况。
int biggest_list = Math.max(wtpmList.size(), wtpList.size());
for (int i = 0; i < biggest_list; i++) {
if(i >= wtpmList.size())
SubPartandMaster.add(new Pair<String, String>(null, wtpList.get(i)));
else if (i >= wtpList.size())
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), null));
else
SubPartandMaster.add(new Pair<String, String>(wtpmList.get(i), wtpList.get(i)));
}
您可以重写 get
,使其像 poll
和 return 一样工作,如果没有元素存在则为空值:
List<String> wtpList = new ArrayList<String>() {
@Override
public String get( int idx ) {
return( idx < size() ? super.get( idx ) : null );
}
};