检查列表只有一个非空元素,并使用Java8检索它
如何检查列表是否只有一个非null元素,如果是,如何使用Java8或Streams检索相同的元素 我的一个方法返回对象列表,它需要检查返回的列表是否只包含一个非空对象,如果是这样,它将创建下面定义的映射,否则,需要记录一个错误,如下所示检查列表只有一个非空元素,并使用Java8检索它,java,arraylist,java-8,java-stream,Java,Arraylist,Java 8,Java Stream,如何检查列表是否只有一个非null元素,如果是,如何使用Java8或Streams检索相同的元素 我的一个方法返回对象列表,它需要检查返回的列表是否只包含一个非空对象,如果是这样,它将创建下面定义的映射,否则,需要记录一个错误,如下所示 `public void myMethod() { List<MyClass> tst = getAll(); if(!tst.isEmpty() ) { if( tst.size() == 1) { if(
`public void myMethod() {
List<MyClass> tst = getAll();
if(!tst.isEmpty() ) {
if( tst.size() == 1) {
if(tst.get(0)!= null) {
MyClass class1 = tst.get(0);
Map<Integer,MyClass> m =
Stream.of(class1).collect(Collectors.toMap(MyClass:: getId,
Function.identity()));
}
}
else {
LOGGER.error("Multiple object found - {} object", tst.size());
}
}`
`public void myMethod(){
List tst=getAll();
如果(!tst.isEmpty()){
如果(tst.size()==1){
if(tst.get(0)!=null){
MyClass class1=tst.get(0);
地图m=
Stream.of(class1).collect(Collectors.toMap(MyClass::getId),
Function.identity());
}
}
否则{
错误(“找到多个对象-{}对象”,tst.size());
}
}`
我正在寻找一种干净的标准格式的写作方法,因为我有三个If条件,类似的条件应该可以做到,但它不使用流。如果你真的需要使用流,那么说出来,我会尝试一下:)
你试过什么?也许,和你在其他Java版本中做的一样。为什么要使用
Stream
?为什么不只是一个简单的大小检查、一个get()
和一个null
检查?什么是“检索相同的”?如果(tst.size()=1&&tst.get(0)!=null)返回集合。singletonMap(tst.get(0).getId(),tst.get(0));
对“notempty”的测试是多余的,因为大小为1的列表不是空的,使用流API在这里没有好处。
int notNullCount = 0;
Object myNotNullElement;
for (Object element : myArray){
if (notNullCount > 1){
//Throw exception or do whaterver you need to do to signal this
break;
}
if (element != null){
myNotNullElement = element;
notNullCount++;
}
}