Java 8 java.lang.IndexOutOfBoundsException:索引:0,大小:0 java 8

Java 8 java.lang.IndexOutOfBoundsException:索引:0,大小:0 java 8,java-8,Java 8,上面的代码给了我一个例外 getAbcCont方法将返回ABC对象列表。当前我的eMsg包含两个带有getAbcCont的对象。当控件到达.collect(Collectors.toList()).get(0)时它给出了上述异常。必须通知任何帮助建议。这意味着过滤器后的结果是零元素,因此您无法执行get(0) 一个快速的解决方案是首先返回元素列表,然后检查是否至少有一个元素 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at jav

上面的代码给了我一个例外


getAbcCont
方法将返回ABC对象列表。当前我的eMsg包含两个带有getAbcCont的对象。当控件到达
.collect(Collectors.toList()).get(0)时它给出了上述异常。必须通知任何帮助建议。

这意味着过滤器后的结果是零元素,因此您无法执行
get(0)

一个快速的解决方案是首先返回元素列表,然后检查是否至少有一个元素

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
参考:

但作为用户nullpointer,在尝试使用对象abc调用
remove()
之前,可能需要检查是否找到元素。我怀疑尝试从集合中删除null可能没有任何作用,但您可以检查以确保

ABC abc = eMsg.getAbcCont().stream()
                        .filter(cnt -> (option.geiID().equals(cnt.getId()) && option.getIdVersion() == cnt.getIdVersion()))
                        .collect(Collectors.toList()).findFirst().orElse(null)

你应该这样做!根据sonar,list.isEmpty()而不是list.size()

答案的可能副本值得在上面的链接中阅读,并将促使您更好地理解,而不仅仅是快速修复。我认为您错过了
delemg.getAbcCont().remove(abc)
在问题中…
orElse(null)
可能导致此处出现NPE。
List<ABC> list = ABC abc = eMsg.getAbcCont().stream()
                        .filter(cnt -> (option.geiID().equals(cnt.getId()) && option.getIdVersion() == cnt.getIdVersion()))
                        .collect(Collectors.toList());

if(list.size() > 0){
 ABC abc = list.get(0);
}
ABC abc = eMsg.getAbcCont().stream()
                        .filter(cnt -> (option.geiID().equals(cnt.getId()) && option.getIdVersion() == cnt.getIdVersion()))
                        .collect(Collectors.toList()).findFirst().orElse(null)
if(abc != null){
 delEmsg.getAbcCont().remove(abc);
}