Java8函数式编程

Posted 倔强中前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8函数式编程相关的知识,希望对你有一定的参考价值。

在Java8的 java.util.function中包含以下几个接口

1、Function,先上源码

/*
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package java.util.function;

import java.util.Objects;

/**
 * Represents a function that accepts one argument and produces a result.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #apply(Object)}.
 *
 * @param <T> the type of the input to the function
 * @param <R> the type of the result of the function
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Function<T, R> {

    /**
     * 将Function对象应用到输入的参数上,然后返回计算结果
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);

    /**
     * 返回一个先执行当前函数对象apply方法再执行after函数对象apply方法的函数对像.
     *
     * @param <V> the type of input to the {@code before} function, and to the
     *           composed function
     * @param before the function to apply before this function is applied
     * @return a composed function that first applies the {@code before}
     * function and then applies this function
     * @throws NullPointerException if before is null
     *
     * @see #andThen(Function)
     */
    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    /**
     * 返回一个先执行before函数对象apply方法再执行当前函数对象apply方法的函数对象  
     * @param <V> the type of output of the {@code after} function, and of the
     *           composed function
     * @param after the function to apply after this function is applied
     * @return a composed function that first applies this function and then
     * applies the {@code after} function
     * @throws NullPointerException if after is null
     *
     * @see #compose(Function)
     */
    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

    /**
     * 返回一个执行了apply()方法之后只会返回输入参数的函数对象.
     *
     * @param <T> the type of the input and output objects to the function
     * @return a function that always returns its input argument
     */
    static <T> Function<T, T> identity() {
        return t -> t;
    }
}

以上是关于Java8函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

《Java8实战》读书笔记12:函数式编程

《On Java 8》中文版 第十三章 函数式编程

Java8的函数式编程怎么样?

学 Java8 函数式编程

JAVA8实战 函数式编程

重识Java8函数式编程