【问题标题】:Java8 Lists return element or nullJava8 列表返回元素或 null
【发布时间】:2019-05-22 11:10:05
【问题描述】:

我有这段代码,如果存在我想返回一个元素,否则返回 null

List<String> myList = new ArrayList<>();
myList.add("Test");
myList.add("Example");
myList.add("Sth");

String str = myList.stream()
            .filter(x -> x.equals("eee"))
            .findFirst()
            .orElseGet(null);

但是我在线程“main”java.lang.NullPointerException 中得到了一个异常

【问题讨论】:

  • 使用 orElse 代替 orElseGet

标签: java java-8 functional-programming java-stream optional


【解决方案1】:

orElseGet 接受供应商。你想用orElse:

.findFirst().orElse(null);

使用供应商返回 null 没有多大意义,但如果你这样做,它看起来像:

.findFirst().orElseGet(() -> null); //if argument is null, you get the NPE

orElseGet 的 JavaDocs(感谢 bambam 的添加评论)提到它:

抛出
NullPointerException - 如果 value 不存在而 other 为 null

【讨论】:

    【解决方案2】:

    试试这个代码:

    List<String> myList = new ArrayList<>();
    myList.add("Test");
    myList.add("Example");
    myList.add("Sth");
    
    String str = myList.stream()
            .filter(s -> null != s && s.equals("Test"))
            .findFirst()
            .orElseGet(() -> null);
    System.out.println(str);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 2015-04-20
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2015-08-20
      相关资源
      最近更新 更多