检查列表只有一个非空元素,并使用Java8检索它

检查列表只有一个非空元素,并使用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(

如何检查列表是否只有一个非null元素,如果是,如何使用Java8或Streams检索相同的元素

我的一个方法返回对象列表,它需要检查返回的列表是否只包含一个非空对象,如果是这样,它将创建下面定义的映射,否则,需要记录一个错误,如下所示

`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++;
    }
}