Как заменить оператор "! = Null" ссылкой на метод? - PullRequest
0 голосов
/ 18 декабря 2018

Мой Intelij показывает мне, что я могу заменить лямбду .filter(bean -> bean != null) ссылкой на метод.Для меня это очевидно, как это сделать, когда у меня есть класс или объект с методами.Но как сделать ссылку на != null, есть ли класс, который имеет какой-то метод isNull()?

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Перемещено из комментария к ответу

Конечно, как говорит Аомин, для этого можно использовать Objects::nonNull.

Но для кода, который не имеетдоступная функция, я думаю, полезно знать, что вы можете использовать много вещей в лямбда-выражениях;Вы можете использовать блоки кода или просто написать простой метод, следуя контракту лямбды и передавая ссылку на этот метод.

class Test {

    public static void main(String[] args){
        Stream<Object> stream = ...;

        // lambda from code block
        stream.filter(bean -> {return bean != null;});

        Predicate<Object> p1 = o ->  {return o != null;};

        // which resolves to the below
        Predicate<Object> p2 = new Predicate<>() {
            @Override public boolean test(Object o) {
                return o != null;
            }
        };

        // or pass your own method that can resolve to the correct functional class
        stream.filter(Test::myPredicateTest);
    }

    // meets the contract of a Predicate<Object>.test(Object o) returning boolean
    public static boolean myPredicateTest(Object o) {
        return o != null;
    }
}
0 голосов
/ 18 декабря 2018

Да, конечно;Вы можете использовать Objects::nonNull API.

package com.logicbig.example.objects;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class NonNullExample {

    public static void main(String... args) {
        List<String> list = Arrays.asList(null, null, "first_element", "second_element", null);
        list = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
        System.out.println(list);
    }

}
0 голосов
/ 18 декабря 2018

Это точная причина, по которой существует API Objects::nonNull:

.filter(Objects::nonNull);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...