接口的使用-常用的函数式接口举例
第一个常用的函数式接口-Supplier生产型接口
package com.yunji.demo02;/*
*@author wanghongyuan
*@Create 2021/1/17 9:55
*/
import java.util.function.Supplier;
/*
常用的函数式接口
java.util.function.Supplier<T>接口仅包含一个无参方法:T get()。用来获取一个泛型参数指定类型的对象数据。
Supplier<T>接口称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据
*/
public class Demo01Supplier {
//定义一个方法,方法的参数传递Supplier<T>接口,泛型执行String,get方法就会返回一个String
public static String getString(Supplier<String> sup){
return sup.get();
}
public static void main(String[] args) {
//调用getString方法,方法的参数Supplier是一个函数式接口,所以可以传递Lambda表达式
String s = getString(() -> {
//生产一个字符串,并返回
return "胡歌";
});
System.out.println(s);
//优化Lambda表达式
String s1 = getString(() ->"胡歌");
System.out.println(s1);
}
求元素中的最大值,使用Lambda实现
package com.yunji.demo02;/*
*@author wanghongyuan
*@Create 2021/1/17 10:15
*/
import java.util.function.Supplier;
/*
练习:求数组元素最大值
使用Supplier接口作为方法参数类型,通过Lambda表达式求出int数组中的最大值
提示:接口的泛型请使用java.long.Integer类
*/
public class getMax {
// 定义一个方法,用于获取int类型数组中元素的最大值,方法的参数传递Supplier接口,泛型使用Integer
public static int getMaxOne(Supplier<Integer> sup) {
return sup.get();
}
public static void main(String[] args) {
//定义一个int数组,并赋值
int[] arr = {12, 123, 3433, 2342, 1234, 34332};
//调用getMax方法,方法参数Supplier是一个函数式接口,所以可以传递Lambda表达式
int maxOne = getMaxOne(() -> {
int max = arr[0];
//我们遍历这个数组
for (int i : arr) {
//使用其他元素和最大值比较
if (i > max) {
//如果i大于max,则替换max最为最大值
max = i;
}
}
return max;
});
System.out.println("数组中的元素最大值是:"+maxOne);
}
}
第二个常用的函数式接口-Consumer接口
package com.yunji.demo02;/*
*@author wanghongyuan
*@Create 2021/1/17 12:00
*/
import java.util.function.Consumer;
/*
java.util.Consumer<T>接口则正好与Supplier接口相反。
Supplier是生产的接口(生产一个数据),而Consumer接口是一个消费的接口(消费一个数据),其数据类型由泛型决定。
Consumer接口是一个消费型接口,泛型指定什么类型,就可以使用accept方法消费什么类型的数据
怎么消费(使用),需要自定义(输出,计算.....)
*/
public class Demo02Consumer {
/*
定义一个方法,方法的参数传递一个字符串姓名
方法的参数传递Consumer接口,泛型使用String
可以使用Consumer接口消费字符串的姓名
*/
public static void method(String name, Consumer<String> con){
con.accept(name);
}
public static void main(String[] args) {
//调用method方法,传递字符串性名,方法的另一个参数是Consumer接口,是一个函数式接口,可以使用Lambda表达式
method("小赵赵",(String name)->{
//对传递的字符串进行消费
//消费方式直接输出字符串
System.out.println(name);
//消费方式:把字符串进行反转输出。参数直接传递name,调用reverse方法进行反转,最后用toString,转换成字符串。
String rename = new StringBuilder(name).reverse().toString();
System.out.println(rename);
});
}
}