美文网首页
Java学习笔记(2)使用java.util.function包

Java学习笔记(2)使用java.util.function包

作者: 浩神 | 来源:发表于2019-03-28 13:49 被阅读0次

    上节提到Lambda是实例化单抽象方法接口(函数式接口)的语法糖。

    那么我们在使用Lambda的时候,第一步是否需要先去构建一些接口呢? 如我们想写一个打印的Lambda, 我们必须先构建一个接口:

    // 想用Lambda? 先定义一个接口吧
    interface Printable {
        String print();
    }
    
    public class Example {
        public static void main(String args[]) {
            Printable printer1 = () -> "Print something";
            System.out.println(printer1.print());
        }
    }
    

    使用Lambda先定义接口?

    Java8给我们定义了一些函数式接口,这些接口在 java.util.function包里面,主要分成下面四种:

    • Consumer接口: 接受一个参数,但不返回(consumer也有消费者的意思)
    • Suplier接口:不接收参数,但返回一个值(Suplier也有供应者的意思)
    • Predicate接口: 接受一个参数,返回true或者false(predicate也有断定的意思)
    • Function接口: 接受一个参数,返回一个值

    上面我们提到的Printable接口,就可以用Suplier接口定义:

       public static void main(String args[]) {
            Supplier printer2 = () -> "Print something";
            System.out.println(printer2.get());
        }
    

    其实,function包最多的还是用在stream和数组、list等操作。如:

    • Iterable接口的foreach方法:

      void forEach(Consumer<? super T> action)
      
    • Stream.allMatch(Predicate<? super T> predicate) // 使用Predicate做筛选
    • Stream.map中,使用Function接口做map
    • Optional.orElseGet方法中,使用Suplier获取一个值

    相关文章

      网友评论

          本文标题:Java学习笔记(2)使用java.util.function包

          本文链接:https://www.haomeiwen.com/subject/qxaniftx.html