Списки Java8 возвращают элемент или ноль - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть этот фрагмент кода, где я хочу вернуть элемент, если он есть, в противном случае ноль

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 голосов
/ 22 декабря 2018

Попробуйте этот код:

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);
0 голосов
/ 22 декабря 2018

orElseGet принимает поставщик.Вы хотите использовать orElse:

.findFirst().orElse(null);

Нет смысла использовать поставщика для возврата null, но если бы вы это сделали, это выглядело бы так:

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

В JavaDocs orElseGet (благодаря комментарию Бамбама за добавление) упоминается:

Броски : NullPointerException - если значение отсутствует, а другое равно null

...