Java=JDK8新特性,Lambda表达式,Stream流

本文介绍了Java 8中的两大重要特性:Lambda表达式和Stream流。Lambda表达式使得函数可以作为方法参数,简化了代码。Stream流提供了新的数据处理方式,但可能降低代码可读性。文章详细讲解了Lambda的基本语法和Stream的操作,如filter、map、forEach等,并探讨了如何通过Stream进行数据查找和收集操作。同时,还给出了相关资源链接供深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lanbda表达式

Stream流

一。Lambda表达式

也可以成为闭包,推动jdk8发布的最重要的特性

Lambda允许把函数作为一个方法的参数-函数作为参数传递进方法中

使用Lambda 表达式可以使代码变的更加简洁紧凑

格式:

Lambda的标准格式:
	(参数列表)->{方法体;return 返回值;}
详情介绍:
	(参数列表) 相当于方法的参数,如果没有参数,那么只写小括号即可(小括号不能省略)
    ->: 固定用法,代码拿着前面的参数,去做什么事情
    {}: 大括号中先写计算过程,如果有返回值return 返回值;,如果没有返回值return语句可以省略    
//面向对象的格式
new Thread(new Runnable() {
	public void run() {
		System.out.println("执行了...");
	}
}).start();   
//Lambda的格式
new Thread(()->{System.out.println("执行了...");}).start();

Lambda的参数和返回值

public static void arraySort1(){
    //1.数组
    Integer[] nums = {4,5,61,7,8,9,34,56,345};
    //2.对数组排序(默认升序)
    //Arrays.sort(nums);
    //        Arrays.sort(nums, new Comparator<Integer>() {
    //            @Override
    //            public int compare(Integer o1, Integer o2) {
    //                //降序
    //                return o2-o1;
    //            }
    //        });
    //使用Lambda表达式修改上面冗余的代码
    Arrays.sort(nums,(Integer o1, Integer o2)->{return o2-o1;});

    //3.输出
    System.out.println(Arrays.toString(nums));
}

public static void main(String[] args) {
    //1.数组
    Dog[] dogs = new Dog[4];
    dogs[0] = new Dog(4,"jack",4);
    dogs[1] = new Dog(3,"mary",5);
    dogs[2] = new Dog(2,"ady",6);
    dogs[3] = new Dog(5,"hanmeimei",3);
    //2.排序
    //        Arrays.sort(dogs, new Comparator<Dog>() {
    //            @Override
    //            public int compare(Dog o1, Dog o2) {
    //                //按照狗的年龄降序
    //                return o2.age-o1.age;
    //            }
    //        });
    //使用Lambda表达式修改上面冗余的代码
    Arrays.sort(dogs,(Dog o1, Dog o2)->{return o2.age-o1.age;});

    //3.打印
    for (Dog dog : dogs) {
        System.out.println(dog);
    }
}

Lambda的省略格式

a.参数类型可以省略
b.如果参数只有一个,那么小括号可以省略
c.如果{}中的代码可以写成一句代码.那么{},return关键字和分号可以同时省略(不能省略某个)   
    
//体验一下Lambda表达式(函数式编程)优雅的写法
new Thread(()->{System.out.println("执行了...");}).start();
//省略格式
new Thread(()->System.out.println("执行了...")).start();  


//使用Lambda表达式修改上面冗余的代码
Arrays.sort(nums,(Integer o1, Integer o2)->{return o2-o1;});
//省略格式
Arrays.sort(nums,(o1,o2)-> o2-o1);


//使用Lambda表达式修改上面冗余的代码
Arrays.sort(dogs,(Dog o1, Dog o2)->{return o2.age-o1.age;});
//省略格式
Arrays.sort(dogs,(o1,o2)->o2.age-o1.age);

注意事项:

a.Lambda只能用于替换 有且仅有一个抽象方法的接口的匿名内部类对象,这种接口称为函数式接口
b.Lambda具有上下文推断的功能, 所以我们才会出现Lambda的省略格式  

 

二。Stream流

唯一缺点是:代码可读性不高

流Api的接口定义在java.util.stream包下。BaseStream是最基础的接口,但是最常用的是BaseStream的一个子接口--Stream,基本上绝大多数的流式处理都是在Stream接口上定义的

count()  返回流中的元素个数  终端操作

distinct() 去除流中的重复元素, 中间操作

filter()  返回一个满足指定条件的流  中间操作

forEach()  遍历流中的每一个元素,执行action操作  终端操作

limit()  获取流中前maxsize元素  中间操作

map() 对流中的元素调用mapper方法,产生包中含这些元素的新的流

skip()

max()终端操作

min()  终端操作

sorted() 排序,按指定规则  终端操作

sorted(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值