小白近期简单学习了一下Java8的几个新特性,主要是Lambda表达式,函数式编程,Stream(流),现将学习的一些简单的语句记录下来,如有机会也可以帮助想简单了解这类知识的人。
话不多说,直接上代码(包含简单讲解)
public class LmdTest {
public static void main(String[] args) {
/*
* 一:Lambda,总的来说,只要是一个接口中只有一个抽象方法的,都可以实现lambda表达式
*/
// Lmd简单调用,并返回参数
LmdString lmdStr = name -> "name:" + name;
System.out.println(lmdStr.rtnName("小白"));
//Lmd数字运算 +
LmdMath lmdMt1 = (numA, numB) -> numA + numB;
System.out.println("numA + numB:" + lmdMt1.math(3,3));
//Lmd数字运算 -
LmdMath lmdMt2 = (numA, numB) -> numA - numB;
System.out.println("numA - numB:" + lmdMt2.math(3,3));
//Lmd数字运算 *
LmdMath lmdMt3 = (numA, numB) -> numA * numB;
System.out.println("numA * numB:" + lmdMt3.math(3,3));
//Lmd数字运算 /
LmdMath lmdMt4 = (numA, numB) -> numA / numB;
System.out.println("numA / numB:" + lmdMt4.math(3,3));
/*
* 二:函数式编程
*/
// JDK 1.8 新增加的函数接口:java.util.function,它包含了很多类来支持Java的函数式编程
BiFunction<String,String,String> rtnHel = (a,b) -> a + b;
System.out.println(rtnHel.apply("Hi:","小白"));
Function<String,String> rtnHel1 = (a) -> a + "-1-";
Function<String,String> rtnHel2 = (a) -> a + "-2-";
// 函数式接口中,andThen与compose的区别
System.out.println("andThen:" + rtnHel1.andThen(rtnHel2).apply("xiao"));
System.out.println("compose:" + rtnHel1.compose(rtnHel2).apply("xiao"));
/*
* 三:Stream(流)
*/
Random random = new Random();
int org = 0, bound = 10;
// Stream 简单用法
random.ints(org,bound).limit(10).forEach(System.out::println);
// Stream 复杂用法 + 解释
List<Integer> list = random.ints(org,bound) // 生成大于org,小于bound的数字流
.limit(10) // 限制数量,不然会一直生成
.filter(num -> num <= 5) // 过滤,需要小于等于5
.map(num -> num + 10) // 过滤后的数字都加1
.boxed() // 转换为对象流
.collect(Collectors.toList()); // 转为List
System.out.println(list);
}
interface LmdString {
//Lambda表达式调用的方法
String rtnName(String name);
}
interface LmdMath {
//Lambda表达式调用的方法
int math(int numA, int numB);
}
}
运行结果分别为:
name:小白
numA + numB:6
numA - numB:0
numA * numB:9
numA / numB:1
Hi:小白
andThen:xiao-1--2-
compose:xiao-2--1-
5
7
6
9
6
9
7
8
7
7
[15, 12, 12, 11, 15, 11, 10]
Process finished with exit code 0