Lamdba表达式作用
- Lamdba表达式微Java添加了确实的函数式编程特性,像python、javascript就支持函数式编程(lamdba表达式的类型是函数),函数在java8将函数当做一等公民看待(在java中lamdba表达式是对象)。
- 在java中,lamdba表达式是对象,他们必须依附于一类特别的对象类型–函数式接口(Function Interface)
函数式接口的实例可以通过(lamdba表达式、方法引用、构造方法)来创建
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8);
//jdk1.8使用函数式接口,通过Lamdba表达式
list.forEach( i -> System.out.println(i));
//通过方法引用来创建一个函数式接口的实例 ::实际上是对Consumer接口的一个实现
list.forEach(System.out::println);
下面是两个练习
lambda有参数有返回值的练习
需求:
使用多个person作为数组
对数组中person对象的年龄排序
*/
public class HavaResponseLamdbaDemo {
public static void main(String[] args) {
//数组
// Person[] peoples = {new Person("张三",12), new Person("李四",32),new Person("王五",18)};
// Arrays.sort(peoples, new Comparator<Person>() {
// @Override
// public int compare(Person o1, Person o2) {
// return o1.getAge()-o2.getAge();
// }
// });
// lamdba表达式
// Arrays.sort(peoples,((o1, o2) -> {return o1.getAge()-o2.getAge();}));
// //继续简化:Comparator的静态方法
// Arrays.sort(peoples,Comparator.comparingInt(Person::getAge));
// for (Person people:
// peoples) {
// System.out.println(people.getAge());
// }
// ----------------------------------分隔符------------------------------------------------
// 集合
List<Person> peoples = Arrays.asList(new Person("张三",12), new Person("李四",32),new Person("王五",18));
Collections.sort(peoples,Comparator.comparingInt(Person::getAge));
peoples.forEach((i)-> System.out.println(i.getAge()));
}
}
lambda表达式
计算器:进行两数运算 通过定义一个函数式接口
*/
public class AddCalculateDemo {
public static void main(String[] args) {
AddCalculateDemo demo = new AddCalculateDemo();
System.out.println(demo.calculateMath(1,2,(a,b)->a+b));
System.out.println(demo.compute(2,value -> 2*value));
}
/**
* 定义一个方法并将一个自己定义函数式接口作为入参进行计算
* @param a
* @param b
* @param calculate
* @return
*/
public int calculateMath(int a,int b ,Calculate calculate){
return calculate.cal(a,b);
}
/**
* 定义一个方法将Function接口作为入参进行计算
* @param a
* @param function
* @return
*/
public int compute(int a,Function<Integer,Integer> function){
return function.apply(a);
}
}
/**
* 定义一个函数式接口
*/
@FunctionalInterface
interface Calculate{
int cal(int a,int b);
}```