|   |      1 
                                  79
                             
   我同意
   
    Stuart Marks
   
   那个
    
   
    编辑:
   
   Java 9添加了静态工厂方法
   
     
   这并没有像Stuart Marks所讨论的那样滥用Optional API,而且与三元运算符解决方案不同,没有出现空指针异常的机会(例如,如果你不注意并打乱了操作数的顺序)。它还可以使用上限通配符,而不需要
    | 
|   |      2 
                                  27
                             
   我能想到的最好的办法就是使用
    
   
    已更新
   
   使用@Misha的建议
    | 
|   |      3 
                                  18
                             
   在其他答案中
    让我提出以下更平凡的技巧: 我想三元运算符现在有些过时了,但我认为这是最简单、最有效的解决方案。 
   如果我是为real(也就是说,为一个真正的库,而不仅仅是Stack Overflow上的示例代码)编写的,我会添加通配符,以便流返回类型可以与List类型不同。哦,它可以是一个集合,因为这是
    
   (警告抑制是必要的,因为
    | 
|   |      4 
                                  12
                             apache通用集合4:  | 
|   |      5 
                                  8
                             Java 8: Java 9: Apache Commons集合4:  | 
|  |      6 
                                  0
                             就我个人而言,我认为null是不可取的,并且尽可能使用Optional,尽管性能开销很小。因此,我使用Stuart Marks的接口和基于gdejohn的实现,即。  | 
|   |      7 
                                  0
                             Java 16
   这里有一个生成流的选项
   
    可为空的源
   
   使用Java 16
   
     
   此操作需要类型为的参数
    
   其中
   
    方法参考
   
    
   以及
    
   
    笔记
   
   那个
    
 笔记1. 列表( 以及其他集合和阵列 )是数据的容器,即当你需要一个你感兴趣的列表中的东西时,实际值存储在里面。一个可为空的数据容器迫使您采取与业务逻辑无关的正确防御措施,您或同事可能会忘记这一点(这会产生一个随时可能出现的问题)。 
   无论可为null的集合的来源如何,如果您有可能更改正在使用的代码,则可以消除实际问题,而不是使用
    以下是可为空集合的可能来源及其处理方法: 
 
   
    2.
   
   如果您需要一种快速的方法使代码工作,但您希望知道传入的列表
    
   
    3.
   
   最后,作为
   
    @斯图尔特·马克斯
   
   已在中指出
   
    
     his answer to this question
    
   
    | 
|   | Dee J. Doena · 比较两个空可空值 9 年前 | 
|   | Konrad Viltersten · 如何让EF理解某些列不可为空? 9 年前 | 
|   | Martin Senne · SparkSQL:如何处理用户定义函数中的空值? 10 年前 | 
|   | Muhammad Nasir · 空对象设计模式与空对象检查 10 年前 | 
|   | checketts · 从可空对象创建流的惯用方法 10 年前 |