Lambda表达式
函数式接口
一个接口中有且只有一个抽象方法,这种接口视为函数式接口
函数式编程
基于函数式接口并使用Lambda表达的编程方式,函数式编程理念是将代码作为可重用数据代入到程序运行中
Lambda表达式语法
package com.lamba;
@FunctionalInterface
public interface MathOperation {
public Float operate(Integer a,Integer b);
}
package com.lamba;
public class LambdaSample {
public static void main(String[] args) {
//标准Lambda使用方式
//约束条件:Lambda表达式只能实现有且只有一个抽象方法的接口,Java称 '函数式接口'
MathOperation addition = (Integer a,Integer b)->{
System.out.println("加法运算");
return a+b+0f;
};
System.out.println(addition.operate(5, 3));
//2.Lamdba允许忽略参数类型
MathOperation substraction = (a,b)->{
return a-b+0f;
};
System.out.println(substraction.operate(5, 3));
//3.单行实现代码可以省略大括号和return
MathOperation multiplication = (a,b)->a*b+0f;
System.out.println(multiplication.operate(5, 3));
}
}
常用函数式接口
Predicate
package com.lamba;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateSample {
public static void main(String[] args) {
//判断是否大于2
Predicate<Integer> predicate = n->n>4;
boolean test = predicate.test(2);
System.out.println(test);
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
filter(list,n->n%2==1);//打印奇数
filter(list,n->n%2==0);//打印偶数
//List<String> list1 = Arrays.asList("java","python","php","HTML");
//filter(list1,str->str.indexOf('a')!=-1);
}
public static void filter(List<Integer> list , Predicate<Integer> predicate){
for(Integer num : list){
if(predicate.test(num)){
System.out.print(num+" ");
}
}
System.out.println();
}
}
Consumer
package com.lamba;
import java.util.function.Consumer;
public class ConsumerSample {
public static void main(String[] args) {
output(s-> System.out.println("向控制台打印:"+s) );
output(s-> System.out.println("向XXX网站发送数据包:"+s) );
}
public static void output(Consumer<String> consumer){
String text="asdfghjkl qwertyuiop";
consumer.accept(text);
}
}
Function
package com.lamba;
import java.util.*;
import java.util.function.Function;
public class FunctionSample {
/**
* 利用Func函数式接口生成定长字符串
*/
public static void main(String[] args) {
Function<Integer,String> randomStringFunction = l->{
String chars="abcdefghijklmnopqrstuvwxyz1234567890";
StringBuffer stringBuffer = new StringBuffer();
Random random = new Random();
for(int i=0;i<l;i++){
int position = random.nextInt(chars.length());
stringBuffer.append(chars.charAt(position));
}
return stringBuffer.toString();
};
System.out.println(randomStringFunction.apply(9));
max();
}
/**
* 寻找List集合中最大值
*/
public static void max(){
Function<List<Integer>,Integer> maxIntegerFunction = list -> {
int max=-1;
for(Integer l:list) if(l>max) max=l;
return max;
};
System.out.println(maxIntegerFunction.apply(Arrays.asList(1, 2, 13, 14, 18, 101)));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了