Java函数式接口和Lambda表达式

本文介绍了Java8中引入的Lambda表达式,它是函数式编程的一个重要特性,用于简化函数式接口的匿名内部类。文中详细讲解了Lambda表达式的概念、函数式接口的应用、在排序、过滤和映射等场景中的使用,以及其在GUI编程中的事件监听示例。
摘要由CSDN通过智能技术生成

lambda表达式是Java函数式编程,jdk1.8之后提供的新特性

1.1函数式编程

函数式编程是一种思想特点,忽略面向对象的复杂语法,强调做什么,而不是谁去做

简单来说就是我们更加关注方法体中的逻辑,而不是创建出来的对象

Lambda表达式就是函数式思想的体现

1.2函数式接口

函数式接口(Function interface也叫作功能性接口),一个接口里面只包含一个函数的接口,jdk8提供@FunctionalInterface,作为声明函数式接口的注解,但这是非必须的,只要定义的接口符合函数式接口标准(一个接口中只有一个方法),虚拟机会自动判断

如Comparator接口就是一个函数式接口:

58c3ecaf448a43afb396caaa35f6973d.png

lambda表达式无法单独存在,必须要求函数接口来实现,用lambda来实现这个借口

1.3应用场景

1.定义匿名函数

public interface Swimming {
    void swim();
}
public class Main {
    public static void main(String[] args) {
        //匿名内部类
        new Swimming(){
            @Override
            public void swim() {
                System.out.println("游泳");
            }
        };
    }
}

2.排序sort

lambda作为排序函数参数,指定排序规则

import java.util.Arrays;
import java.util.Comparator;
public class Test5 {
    public static void main(String[] args) {
        Integer[] arr={1,2,3,4,5};
        //降序排序
        Arrays.sort(arr,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
    }
}

3.过滤

在stream流中使用filter过滤流中的数据

import java.util.Arrays;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class Test5 {
    public static void main(String[] args) {
        String[] arr={"小红","中红","大红"};
        arr=Stream.of(arr).filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("小");
            }
        }).toArray(String[]::new);
        System.out.println(Arrays.toString(arr));//小红
    }
}

4.映射

在stream流中使用map完成数据的映射

import java.util.function.Function;
import java.util.stream.Stream;
public class Test5 {
    public static void main(String[] args) {
        String[] arr={"1","2","3"};
        //将string类型转换为int
        Stream.of(arr).map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return Integer.parseInt(s);
            }
        });
        
    }
}

5.GUI编程

如:定义事件监听

1.4Lambda表达式

①概述

Lambda表达式是JDK8开始的一种新语法特点

Lambda表达式只能简化函数式接口(只有一个抽象方法的接口)的匿名内部类的写法

②格式

( 参数类型 参数1,参数类型 参数2,....)->{方法体  }

( )对应方法的形参

->固定格式

{}对应着方法的方法体

③Lambda的省略规则

Ⅰ.参数类型可以省略不写

Ⅱ.如果只有一个参数,()也可以省略

Ⅲ.如果方法体只有一行,大括号,分号,return可以省略不写

如下:利用lambda表达式简写函数式接口

import java.util.Arrays;
import java.util.Comparator;
public class Test5 {
    public static void main(String[] args) {
        //降序
        Integer[] arr={1,2,3,4,5};
//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });
        //lambda表达式简化
        Arrays.sort(arr,(o2,o1)->o2-o1);
        

    }
}

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤姆大聪明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值