Java--函数式接口(java.util.function包)

原文网址:Java--函数式接口(java.util.function包)_IT利刃出鞘的博客-CSDN博客

简介

本文介绍Java的函数式接口(java.util.function包)。

常用接口

接口定义

方法

作用

说明

Function< T, R >

R apply(T t);

参数:T对象。返回值:R对象。

功能型接口

Consumer< T >

void accept(T t);

参数:T对象。返回值:无

消费型接口

Supplier< T >

T get();

参数:无。返回值:T对象

供给型接口

Predicate< T >

boolean test(T t);

参数:T对象。返回值:boolean

断言型接口

不常用接口

接口定义

描述

UnaryOperator< T >

参数:T对象。返回值:T对象

BiConsumer<T, U>

参数:T对象和U对象。返回值:无

BiPredicate<T, U>

参数:T对象和U对象。返回值:boolean

BiFunction<T, U, R>

参数:T对象和U对象。返回值:R对象

BinaryOperator< T >

参数:两个T对象。参会之:T对象

JDK1.8函数接口变化

JDK1.8新增加的函数接口:

  • java.util.function
  • java.util.stream

JDK1.8之前已有的函数式接口:

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.security.PrivilegedAction
  • java.util.Comparator
  • java.io.FileFilter
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvocationHandler
  • java.beans.PropertyChangeListener
  • java.awt.event.ActionListener
  • javax.swing.event.ChangeListener

Function< T, R >  功能型

简介

概述

作用

实现一个”一元函数“,即传入一个值经过函数的计算返回另一个值。

使用场景

  1. V HashMap.computeIfAbsent(K , Function<K, V>) // 简化代码,如果指定的键尚未与值关联或与null关联,使用函数返回值替换。
  2. <R> Stream<R> map(Function<? super T, ? extends R> mapper); // 转换流

设计思想

一元函数的思想,将转换逻辑提取出来,解耦合

定义

package java.util.function;
import java.util.Objects;

@FunctionalInterface
public interface Function<T, R> {
    // 接受输入参数,对输入执行所需操作后  返回一个结果。
    R apply(T t);

    // 返回一个 先执行before函数对象apply方法,再执行当前函数对象apply方法的 函数对象。
    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
       Objects.requireNonNull(before);
       return (V v) -> apply(before.apply(v));
    }

    // 返回一个 先执行当前函数对象apply方法, 再执行after函数对象apply方法的 函数对象。
    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }   

    // 返回一个执行了apply()方法之后只会返回输入参数的函数对象。
    static <T> Function<T, T> identity() {
        return t -> t;
    } 
}

实例

apply示例1:直接返回

Function<String, String> function = a -> "Hello," + a;
System.out.println(function.apply("Jack")); // Hello,Jack

apply示例2:执行代码再返回

Function<String, String> function = a -> {
    System.out.print("Welcome!");
    return "Hello," + a;
}
System.out.println(function.apply("Jack")); // Welcome!Hello,Jack

compose

Function<String, String> function = a -> {a + " Jack!"};
Function<String, String> function1 = a -> {a + " Bob!"};
String greet = function.compose(function1).apply("Hello");
System.out.println(greet); // Hello Bob! Jack!

andThen

Function<String, String> function = a -> {a + " Jack!"};
Function<String, String> function1 = a -> {a + " Bob!"};
String greet = function.andThen(function1).apply("Hello");
System.out.println(greet); // Hello Jack! Bob!

所有接口

接口定义

描述

Function< T, R >

接收T对象,返回R对象。

DoubleFunction<R>

接收一个double类型的参数并返回结果的函数

DoubleToIntFunction

接收一个double类型的参数并返回int结果的函数

DoubleToLongFunction

接收一个double类型的参数并返回long结果的函数

IntFunction<R>

接收一个int类型的参数并返回结果的函数

IntToDoubleFunction

接收一个int类型的参数并返回double结果的函数

IntToLongFunction

接收一个int类型的参数并返回long结果的函数

LongFunction<R>

接收一个long类型的参数并返回结果的函数

LongToDoubleFunction

接收一个long类型的参数并返回double结果的函数

LongToIntFunction

接收一个long类型的参数并返回int结果的函数

ToDoubleBiFunction<T,U>

接收两个参数并返回double结果的函数

ToDoubleFunction<T>

接收一个参数并返回double结果的函数

ToIntBiFunction<T,U>

接收两个参数并返回int结果的函数

ToIntFunction<T>

接收一个参数并返回int结果的函数

ToLongBiFunction<T,U>

接收两个参数并返回long结果的函数

ToLongFunction<T>

接收一个参数并返回long结果的函数

Consumer< T > 消费型

上边是文章的部分内容,为统一维护,全文已转移到此网址:Java-函数式接口(java.util.function包) - 自学精灵

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值