Java8列出返回元素或null

Nuñ*_*ada 8 java functional-programming optional java-8 java-stream

我有这段代码,我想返回一个元素,如果存在,否则为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);
Run Code Online (Sandbox Code Playgroud)

但无论如何我在线程"main"java.lang.NullPointerException中得到了一个Exception

ern*_*t_k 15

orElseGet需要供应商.你想用orElse:

.findFirst().orElse(null);
Run Code Online (Sandbox Code Playgroud)

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

.findFirst().orElseGet(() -> null); //if argument is null, you get the NPE
Run Code Online (Sandbox Code Playgroud)

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

抛出:
NullPointerException - 如果value不存在而其他值为null