首页 > 其他分享 >Functional接口(函数式接口)

Functional接口(函数式接口)

时间:2025-01-12 10:04:29浏览次数:3  
标签:返回 value 函数 int double Functional long 接口 接收

函数式接口是指仅包含一个抽象方法的接口。它可以包含多个默认方法或静态方法,但抽象方法只能有一个。这种接口都有一个 @FuntionalInterface 注解。

我们可以直接使用 Lambda 表达式来创建函数式接口,然后将创建的函数式接口直接作为某些方法的参数。

eg:

list.forEach(t -> System.out.println(t));

首先看一下 forEach 的定义:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

forEach 是 Iterable 的默认接口,从定义中可以看出,他接受一个 Consumer<T>的参数。然后在内部遍历集合中的每个元素,并调用 action.accept(t)来处理每个元素。

可以看到,forEach 本来是要接受一个 Consumer 类型的对象作为参数,然后我们直接使用 Lambda 表达式生成了一个 Consumer 对象作为参数。

内置接口

  1. 消费类接口

消费类接口的抽象方法特点:有形参,但是返回值是 void。

接口名

抽象方法

描述

BiConsumer<T,U>

void accept(T t, U u)

接收两个对象用于完成功能

DoubleConsumer

void accept(double value)

接收一个double值

IntConsumer

void accept(int value)

接收一个int值

LongConsumer

void accept(long value)

接收一个long值

ObjDoubleConsumer

void accept(T t, double value)

接收一个对象和一个double值

ObjIntConsumer

void accept(T t, int value)

接收一个对象和一个int值

ObjLongConsumer

void accept(T t, long value)

接收一个对象和一个long值

  1. 供给类接口

抽象方法特点:无参,但是有返回值。

接口名

抽象方法

描述

BooleanSupplier

boolean getAsBoolean()

返回一个boolean值

DoubleSupplier

double getAsDouble()

返回一个double值

IntSupplier

int getAsInt()

返回一个int值

LongSupplier

long getAsLong()

返回一个long值

  1. 函数型接口

特点:既有参数又有返回值

接口名

抽象方法

描述

UnaryOperator<T>

T apply(T t)

接收一个T类型对象,返回一个T类型对象结果

DoubleFunction<R>

R apply(double value)

接收一个double值,返回一个R类型对象

IntFunction<R>

R apply(int value)

接收一个int值,返回一个R类型对象

LongFunction<R>

R apply(long value)

接收一个long值,返回一个R类型对象

ToDoubleFunction<T>

double applyAsDouble(T value)

接收一个T类型对象,返回一个double

ToIntFunction<T>

int applyAsInt(T value)

接收一个T类型对象,返回一个int

ToLongFunction<T>

long applyAsLong(T value)

接收一个T类型对象,返回一个long

DoubleToIntFunction

int applyAsInt(double value)

接收一个double值,返回一个int结果

DoubleToLongFunction

long applyAsLong(double value)

接收一个double值,返回一个long结果

IntToDoubleFunction

double applyAsDouble(int value)

接收一个int值,返回一个double结果

IntToLongFunction

long applyAsLong(int value)

接收一个int值,返回一个long结果

LongToDoubleFunction

double applyAsDouble(long value)

接收一个long值,返回一个double结果

LongToIntFunction

int applyAsInt(long value)

接收一个long值,返回一个int结果

DoubleUnaryOperator

double applyAsDouble(double operand)

接收一个double值,返回一个double

IntUnaryOperator

int applyAsInt(int operand)

接收一个int值,返回一个int结果

LongUnaryOperator

long applyAsLong(long operand)

接收一个long值,返回一个long结果

BiFunction<T,U,R>

R apply(T t, U u)

接收一个T类型和一个U类型对象,返回一个R类型对象结果

BinaryOperator<T>

T apply(T t, T u)

接收两个T类型对象,返回一个T类型对象结果

ToDoubleBiFunction<T,U>

double applyAsDouble(T t, U u)

接收一个T类型和一个U类型对象,返回一个double

ToIntBiFunction<T,U>

int applyAsInt(T t, U u)

接收一个T类型和一个U类型对象,返回一个int

ToLongBiFunction<T,U>

long applyAsLong(T t, U u)

接收一个T类型和一个U类型对象,返回一个long

DoubleBinaryOperator

double applyAsDouble(double left, double right)

接收两个double值,返回一个double结果

IntBinaryOperator

int applyAsInt(int left, int right)

接收两个int值,返回一个int结果

LongBinaryOperator

long applyAsLong(long left, long right)

接收两个long值,返回一个long结果

  1. 判断型接口

特点:有参,返回值类型是 boolean 类型。

接口名

抽象方法

描述

UnaryOperator

T apply(T t)

接收一个T类型对象,返回一个T类型对象结果

DoubleFunction

R apply(double value)

接收一个double值,返回一个R类型对象

IntFunction

R apply(int value)

接收一个int值,返回一个R类型对象

LongFunction

R apply(long value)

接收一个long值,返回一个R类型对象

ToDoubleFunction

double applyAsDouble(T value)

接收一个T类型对象,返回一个double

ToIntFunction

int applyAsInt(T value)

接收一个T类型对象,返回一个int

ToLongFunction

long applyAsLong(T value)

接收一个T类型对象,返回一个long

DoubleToIntFunction

int applyAsInt(double value)

接收一个double值,返回一个int结果

DoubleToLongFunction

long applyAsLong(double value)

接收一个double值,返回一个long结果

IntToDoubleFunction

double applyAsDouble(int value)

接收一个int值,返回一个double结果

IntToLongFunction

long applyAsLong(int value)

接收一个int值,返回一个long结果

LongToDoubleFunction

double applyAsDouble(long value)

接收一个long值,返回一个double结果

LongToIntFunction

int applyAsInt(long value)

接收一个long值,返回一个int结果

DoubleUnaryOperator

double applyAsDouble(double operand)

接收一个double值,返回一个double

IntUnaryOperator

int applyAsInt(int operand)

接收一个int值,返回一个int结果

LongUnaryOperator

long applyAsLong(long operand)

接收一个long值,返回一个long结果

BiFunction<T,U,R>

R apply(T t, U u)

接收一个T类型和一个U类型对象,返回一个R类型对象结果

BinaryOperator

T apply(T t, T u)

接收两个T类型对象,返回一个T类型对象结果

ToDoubleBiFunction<T,U>

double applyAsDouble(T t, U u)

接收一个T类型和一个U类型对象,返回一个double

ToIntBiFunction<T,U>

int applyAsInt(T t, U u)

接收一个T类型和一个U类型对象,返回一个int

ToLongBiFunction<T,U>

long applyAsLong(T t, U u)

接收一个T类型和一个U类型对象,返回一个long

DoubleBinaryOperator

double applyAsDouble(double left, double right)

接收两个double值,返回一个double结果

IntBinaryOperator

int applyAsInt(int left, int right)

接收两个int值,返回一个int结果

LongBinaryOperator

long applyAsLong(long left, long right)

接收两个long值,返回一个long结果

除了 Steam 流外其他接受函数式接口作为参数的方法

  1. forEach

遍历集合中的每个元素,并对每个元素执行指定的操作。

参数:Consumer<T>

  1. removeIf

移除集合中满足指定条件的元素。

参数:Predicate<T>

示例:

List<String> list = new ArrayLiat<>(Arrays.asLiat("a","b","c"));
list.removeIf(s -> s.equals("b")); // 将元素b给删除
System.out.println(list); 
  1. replaceAll

对集合中的每个元素执行指定的操作,并用操作结果替换原元素。

参数:UnaryOperator<T>

eg:

List<String> list = Arrays.asList("a","b","c");
list.replaceAll(s -> s.toUpperCase()); // 将所有元素转换为大写
System.out.println(list); 
  1. sort

根据指定的比较器对集合进行排序。

参数:Comparator<T>

eg:

List<String> list = Arrays.asList("b","a","c");
list.sort((s1 , s2) -> s1.compaeTo(s2));
System.out.println(list);

标签:返回,value,函数,int,double,Functional,long,接口,接收
From: https://blog.csdn.net/zaichen1/article/details/145087842

相关文章

  • 简要描述下什么是回调函数并写一个例子出来
    回调函数(CallbackFunction)是一种在特定事件或条件发生时由另一个函数(通常是异步操作)调用的函数。在前端开发中,回调函数常用于处理异步操作,如网络请求、定时任务或用户交互事件等。当这些操作完成时,会调用预先定义好的回调函数,以执行后续的操作。以下是一个使用JavaScript编写的......
  • websocket股票行情接口
    股票行情区别交易所出来的数据,不管通过什么渠道,延时一般都不会差太远,估计一般也就几十ms的差别。但是如果是通过http轮询,不太可能几十ms全部轮询一次。所以,做量化的话,用http协议是最次的选择。能找到的数据提供商,对照着大智慧的行情测试,大部分挂着websocket名头的数据源,数据......
  • golang 函数和方法的区别
    golang函数和方法的区别一句话总结就是,func直接函数名就是函数,否则就是方法.至于是谁的的方法,看函数前面有没有*号的指向.golang中函数第一等公民,所以以函数优先.demo\main.gopackagemainimport"fmt"//定义一个结构体typeStudentstruct{ namestring age......
  • 嵌入式系统里面malloc函数底层原理
       谈到高性能编程,我们绕不过一个问题高效内存分配,通常我们会使用malloc和free函数来申请和释放内存。   那么我们习以为常的malloc和free函数,真的能满足高性能编程的要求吗?   带着这个问题我们来深入理解malloc和free函数实现原理。1.ptmalloc工作原理  ......
  • 深入了解 C++ 函数模板
    函数模板是C++泛型编程的基石之一,它使得程序员可以编写类型无关的代码,提升代码复用性和灵活性.在本文中,我们将从基础到进阶,一步步解析C++函数模板的核心概念,常见用法及其限制.1.初识函数模板1.1定义函数模板:以Max函数为例函数模板允许我们定义一个......
  • 【MySQL】常用的内置函数
    文章目录1.日期函数2.字符串函数3.数学函数4.其它函数在MySQL内部,有很多的函数供我们使用1.日期函数获取时间与日期current_date()current_time()current_timestamp()now()date()获取当前的日期时间仅获取当前的日期/时间获取一个时间加/减一个......
  • 详解JS函数
    函数Function定义方式普通函数JS函数最多只能返回一个数据!,如果函数没有使用return返回数据、相当于returnundefined!函数的参数支持必传参数、默认参数和不定项参数(不定项参数使用三个点表示、且类型是数组),和python相比,不支持关键字参数。fu......
  • 支付宝动物运动会官方API接口,动物运动会官方API接口,动物运动会比赛结果API,运动会API,支
    2025年最热、最火爆的游戏——支付宝动物运动会,正在如火如荼地进行!超强的三方监管机制让得这场赛事达到了公平、公正、公开,三方监管平台分别是:支付宝官方APP、游戏官网 www.zfbgame.com 以及淘宝APP共同携手,确保每一位参与者的权益!支付宝动物运动会是支付宝应用内一项趣味性......
  • SpringBoot流式响应接口
    背景:做AI搜索功能,需要封装AI提供的一个流式接口,并且同样以流式接口的的形式给到前端版本SpringBoot。2.3.2.RELEASE依赖<dependency><groupId>io.projectreactor.netty</groupId><artifactId>reactor-netty</artifactId><version>0.9.10.RELEASE</ver......
  • 如何避免函数调用栈溢出?
    在前端开发中,函数调用栈溢出通常是由于递归调用过深或者大量嵌套函数调用导致的。为了避免函数调用栈溢出,你可以采取以下几种策略:优化递归算法:尾递归优化:尾递归是一种特殊的递归形式,其中递归调用是函数体中最后执行的语句。通过优化尾递归,你可以将递归转换成循环,从而避免栈溢......