如何用方法引用替换“!= null”语句?

时间:2018-12-18 14:25:20

标签: java methods lambda reference

我的Intelij向我展示了我可以用方法参考替换lambda .filter(bean -> bean != null)。当我有一个带有方法的类或对象时,对我来说该怎么做。但是如何在!= null上进行引用,是否有一个具有某种isNull()方法的类?

3 个答案:

答案 0 :(得分:10)

这是Objects::nonNull API存在的确切原因:

.filter(Objects::nonNull);

答案 1 :(得分:0)

从评论移到答案

当然,正如Aomine所说,您可以为此使用Objects::nonNull

但是对于没有可用功能的代码,我认为知道您可以在lambda表达式中使用很多东西很有用;您可以使用代码块,也可以按照lambda的约定编写一个简单的方法,然后传递对该方法的引用。

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

答案 2 :(得分:0)

是的,当然;您可以使用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);
    }

}