Java8列表返回元素或null

时间:2018-12-22 07:43:38

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

我有这段代码,我想在其中返回一个元素(如果存在),否则返回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中遇到异常

2 个答案:

答案 0 :(得分:15)

orElseGet获取一个供应商。您要使用orElse

.findFirst().orElse(null);

使用供应商返回null没多大意义,但是如果您愿意,它看起来像:

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

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

  

抛出
NullPointerException -如果不存在值且other为null

答案 1 :(得分:0)

尝试以下代码:

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);