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

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()终端操作

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值