深入函数式接口与方法引用

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);
}```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值