JAVA8学习之Lambda表达式
程序员文章站
2022-05-22 21:19:09
...
前言
最近项目中用到了Springcloud,而Springcloud中几乎都是Java8构建,恰巧使用了Lambda表达式,lambda表达式一直如雷贯耳,但是因为项目几乎都是在JDK7上面跑的,也就没去深入重点研究。因为现在真正用到了Java8,专门花大量时间去攻读了Java8的书,推荐下面这本书
http://www.jb51.net/books/454450.html
图片和链接是从脚本之家拿过来的,我自己是用ipad看的
语法
Lambda表达式的语法
基本语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
举例
基本使用
在没有lambda之前,我们写一个方法,然后固定返回一个对象
public int MyNumber() {
return 1234;
}
使用Lambda之后:
定义接口
public interface MyNumber {
int getValue();
}
使用
MyNumber myNumber;
myNumber = ()->1234;
System.out.println(myNumber.getValue());
类似的有:
(int x, int y) -> x + y
(String s) -> { System.out.println(s); }
(n) -> {
int result = 1;
for(int i = 1; i <= n; i++)result = i * result;
return result;
}
泛型使用
interface Func<T> {
T func(T t);
}
Func<String> aa = (str) -> {
String result = "";
result = result + str;
return result;
};
System.out.println(aa.func("Hello"));
Func<Integer> bb = (num) -> {
num *= 10;
return num;
};
System.out.println(bb.func(10));
作为参数传递+泛型
public static void main(String[] args) {
//字符类型
String instr = "AbdafdBDAC";
String outStr = (String) test((str) -> str.toLowerCase(), instr);
System.out.println(outStr);
//代码块演示
String instr2 = "AbdafdBDAC";
String outStr2 = (String) test((str) -> {
String result = " -Hello-Nick- ";
return str + result;
}, instr2);
System.out.println(outStr2);
//Integer类型
Integer inInteg = 1234;
Integer outInteg = (Integer) test((str) -> 100 * 10, inInteg);
System.out.println(outInteg);
}
java.util.function包中的预定义函数式接口
接口 | 用途 |
---|---|
UnaryOperator | 对类型为T的对象应用一元预算,并返回结果。结果的类型也是T。包含的方法名为apply() |
BinaryOperator | 对类型为T的两个对象应用操作,并返回结果。结果的类型也是T。包含的方法名为apply() |
Consumer | 对类型为T的对象应用操作。包含的方法名为accept() |
Supplier | 返回类型为T的对象。包含的方法名为get() |
Function | 对类型为T的对象应用操作,并返回结果。结果是类型为R的对象。包含的方法名为apply() |
Predicate | 确定类型为T的对象是否满足某种约束,并返回指定结果的布尔值。包含的方法名为test() |