interface MyInterface {
int sum(int x,int y);
}
public class Main {
public static void main(String[] args) {
}
}
interface MyInterface {
int sum(int x,int y);
}
public class Main {
public static void main(String[] args) {
MyInterface myInterface = (int x,int y) ->{
return x+y;
};
System.out.println(myInterface.sum(1, 2));
}
}
@FunctionalInterface
来表示函数式接口1、参数类型可以不写,只写参数名
MyInterface myInterface = (x,y) ->{
return x+y;
};
2、参数变量名也可以随意定义,但是参数数量一定要一致
MyInterface myInterface = (i,j) ->{
return x+y;
};
3、如果只有一个参数,可以不写小括号,但没有参数一定要写小括号
MyInterface myInterface1 = i ->{
return i;
};
MyInterface myInterface2 = () ->{
return 1;
};
4、方法体如果只有一句话,可以省略 {}
MyInterface myInterface = i -> return i;
以下是 Function API 内置的函数式接口
Consumer、Function、Perdicate、Supplier
是四个常见的函数式接口小案例
1.使用 Supplier 生成一个字符串数据
2.使用 Predicate 验证输入字符串是否为数字
3.使用 Function 转换数据,将字符串转为数字
4.使用 Consumer 判断数字是奇数还是偶数
5.将上面一系列操作串联起来
每个函数式接口当中都有一个方法,需要调用,如果不清楚方法名,可找到这个接口自行查看
1、使用 Supplier 生成一个字符串数据
package org.example;
import java.util.function.Supplier;
public class FunctionDemo {
public static void main(String[] args) {
//生成一个字符串数据
Supplier<String> supplier=() -> "42";
System.out.println(supplier.get());
}
}
2、使用 Predicate 验证输入字符串是否为数字
package org.example;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class FunctionDemo {
public static void main(String[] args) {
//验证输入字符串是否为数字
Predicate<String> predicate=str -> str.matches("-?\\d+(\\.\\d+)?");
System.out.println(predicate.test("435"));
System.out.println(predicate.test("435a"));
}
}
3、转换数据,将字符串转为数字
package org.example;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class FunctionDemo {
public static void main(String[] args) {
//转换数据,将字符串转为数字
Function<String,Integer> function= Integer::parseInt;
Integer num = function.apply("435");
System.out.println(num);
}
}
4、判断数字是奇数还是偶数
package org.example;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class FunctionDemo {
public static void main(String[] args) {
//判断数字是奇数还是偶数
Consumer<Integer> consumer=integer -> {
if (integer %2 == 0){
System.out.println("偶数"+integer);
}else {
System.out.println("奇数"+integer);
}
};
consumer.accept(44);
}
}
5、将这些操作串联起来,实现判断 Supplier 生成的字符串是奇数还是偶数
package org.example;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class FunctionDemo {
public static void main(String[] args) {
//生成一个字符串数据
Supplier<String> supplier=() -> "42";
//验证输入字符串是否为数字
Predicate<String> predicate=str -> str.matches("-?\\d+(\\.\\d+)?");
//转换数据,将字符串转为数字
Function<String,Integer> function= Integer::parseInt;
//判断数字是奇数还是偶数
Consumer<Integer> consumer=integer -> {
if (integer %2 == 0){
System.out.println("偶数"+integer);
}else {
System.out.println("奇数"+integer);
}
};
//将这些操作串联起来,实现判断 Supplier 生成的字符串是奇数还是偶数
if(predicate.test(supplier.get())){
consumer.accept(function.apply(supplier.get()));
}else {
System.out.println("非法数字");
}
}
}
6、也可以将他们全部组合成一个方法
package org.example;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class FunctionMethod {
public static void main(String[] args) {
myMethod(() -> "4aaa",
str -> str.matches("-?\\d+(\\.\\d+)?"),
Integer::parseInt,
integer -> {
if (integer %2 == 0){
System.out.println("偶数"+integer);
}else {
System.out.println("奇数"+integer);
}
});
}
private static void myMethod(
Supplier<String> supplier,
Predicate<String> predicate,
Function<String,Integer> function,
Consumer<Integer> consumer
){
if(predicate.test(supplier.get())){
consumer.accept(function.apply(supplier.get()));
}else {
System.out.println("非法数字");
}
}
}
Function<String,Integer> function,
Consumer<Integer> consumer
){
if(predicate.test(supplier.get())){
consumer.accept(function.apply(supplier.get()));
}else {
System.out.println("非法数字");
}
}
}