0
点赞
收藏
分享

微信扫一扫

函数式编程-lambda函数与jdk8自带的函数接口


目录

​​写在前面​​

​​一、常见写法​​

​​二、@FunctionalInterface注解​​

​​三、default方法​​

​​四、jdk8自带的函数接口(重点)​​

​​ Predicate​​

​​Consumer​​

​​Function​​

​​Supplier​​

​​BiFunction​​

​​jdk提供了很多基本数据类型的类,可以直接使用不需要加泛型​​

​​实例​​

写在前面

本文主要是介绍jdk8自带的函数接口,默认认为读者已经了解或接触过lambda函数基础。

学习jdk8自带的函数接口,主要是为了进一步学习stream流式编程。

一、常见写法

interface Interface1 {
int doubleNum(int i);
}

public static void main(String[] args) {
Interface1 i1 = (i) -> i * 2;

Interface1 i2 = i -> i * 2;

Interface1 i3 = (int i) -> i * 2;

Interface1 i4 = (int i) -> {
System.out.println("-----");
return i * 2;
};

}

二、@FunctionalInterface注解

lambda表达式实现的接口,必须有且仅有一个要实现的方法,使用@FunctionalInterface注解标注之后,如果不符合lambda接口格式,会编译报错。

@FunctionalInterface
interface Interface1 {
int doubleNum(int i);
}

三、default方法

java8可以在接口中编写default默认实现的方法。

若两个接口,都有一个相同的名称、参数的default方法,两个接口被同一个类实现之后,这个类必须要重写这个default方法(编译期就会报错)。

@FunctionalInterface
interface Interface1 {
int doubleNum(int i);

default int add(int x, int y) {
return x + y;
}
}

四、jdk8自带的函数接口(重点)

函数式编程-lambda函数与jdk8自带的函数接口_java

 Predicate

核心方法:

boolean test(T t);

输入一个任意类型的参数,输出一个boolean类型。

Consumer

核心方法:

void accept(T t);

输入一个任意类型的参数,无输出。

Function

核心方法:

R apply(T t);

输入一个任意类型的参数,输出一个任意类型的参数。

Supplier

核心方法:

T get();

无输入参数,输出一个任意类型的参数。

BiFunction

核心方法:

R apply(T t, U u);

输入两个参数,输出一个任意类型的参数。

jdk提供了很多基本数据类型的类,可以直接使用不需要加泛型

函数式编程-lambda函数与jdk8自带的函数接口_java_02

实例

import java.text.DecimalFormat;
import java.util.function.Function;

class MyMoney {
private final int money;

public MyMoney(int money) {
this.money = money;
}

// jdk8自带的接口,Integer为入参,String为出参
public void printMoney(Function<Integer, String> moneyFormat) {
System.out.println("我的存款:" + moneyFormat.apply(this.money));
}
}

public class MoneyDemo {

public static void main(String[] args) {
MyMoney me = new MyMoney(99999999);

Function<Integer, String> moneyFormat = i -> new DecimalFormat("#,###")
.format(i);
// 函数接口链式操作
me.printMoney(moneyFormat.andThen(s -> "人民币 " + s));
}

}

// 执行结果:
// 我的存款:人民币 99,999,999
public static void main(String[] args) {
// 断言函数接口
IntPredicate predicate = i -> i > 0;
System.out.println(predicate.test(-9));

// IntConsumer,jdk中自带一些基本数据类型的,就不需要写泛型了
// 消费函数接口
Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("输入的数据");
}


举报

相关推荐

0 条评论