JAVA8的lambda表达式和Stream(基础)

本文介绍了Java8的lambda表达式和Stream API的基础用法,包括lambda表达式的语法和示例,以及Stream API的转化、过滤、映射、去重、排序等操作。通过示例展示了如何使用这些新特性简化代码,提高处理集合数据的效率。
摘要由CSDN通过智能技术生成

蕉为什么会越来越绿?

对于我个人而言,看到同事用两三行解决了我十几行代码干的事情,而我却看不怎么懂他的代码的时候,恼羞成怒中带着焦虑和羡慕嫉妒恨。开个玩笑,同事关系还是要维持好的,恨是不存在的,但确实会焦虑,所以也引发了对我对自身的一些思考,java8也已经不是新的东西了,但我不会,而且看到同事代码的第一反应居然是天呐,可读性好差0.0。

我不知道大家遇到这样的情况会不会有和我一样的反应,但确实思考过后,剩下的是焦虑和愧疚,开发行业的技术更新换代的很快,我想,java也一样,他也是需要往更深的方向发展,期间可能会有语法上面的变化,所以,为了解决问题,我把JAVA8的这些新特性也学一下。以下是我的学习过程,发布上来也方便自己查阅。

1 lambda表达式

长什么样?

长这样:() - > 5

反正我第一次看见是懵逼的。。。

什么意思?

语法:

(param1,param2,param3 ...,paramN)-  > {
      //代码块;  }
  • 首先我们知道lambda表达式,表达的是接口函数
  • 箭头左侧是函数的逗号分隔的形式参数列表
  • 箭头右侧是函数体代码

示例:

public class Demo{
   
    //抽象功能接口
    interface Printer{
   
        void print(String val);
    }
    //通过参数传递功能接口
    public void printSomething(String val,Printer p){
   
        printer.print(val);
    }
    
    //原来的操作
    public static void main(String[] args){
   
        Demo d = new Demo();
        Printer p = new Printer(){
   
            @Override
            public void print(String val){
   
                System.out.println(val);
            }
        };
        d.printSomething("啦啦啦", p);
    }
    
    //使用lambda语法
    public static void main(String[] args){
   
        Demo d = new Demo();
        Printer p = (String val) -> {
   System.out.println(val);};
        d.printSomething("啦啦啦", p);
    }
}

lambda表达式可以让我们的代码更加简洁。

甚至,还可以再简化

//示例
Printer p = (String val) -> {
   System.out.println(val);};
//去掉参数类型
Printer p = (val) -> {
   System.out.println(val);};
//去掉参数括号
Printer p = val -> {
   System.out.println(val);};
//去掉函数体花括号
Printer p = val -> System.out.println(val);
  • 即使没有在箭头的左侧指定参数的类型,编译器也会从接口方法的形式参数中推断出其类型
  • 当只有一个参数的时候,我们完全可以省略参数的括号
  • 当函数体只有一行的时候,我们完全可以省略函数体花括号

不带参数(可以用空括号代替):

() -> System.out.println("啦啦啦");

最终改造代码为:

public static void main(String[] args){
   
    Demo d = new Demo();
    demo.printSomething("啦啦啦", p -> System.out.println(p));
}

两行代码就搞定了。

2 Java Stream API

是什么?做什么用的?

Stream 可以提高我们处理集合类数据的效率。他就像一个流水线,在这条流水线上有很多工作人员来操作他的数据,A处理完流到B,B处理完流到C。。。在没有学这个之前,我们处理集合类型的数据通常通过for循环,一层一层,一次一次,Stream 会显的更加简洁,方便。

操作步骤:

  • 把产品放到流水线上(转化为流),称为源操作
  • 对产品进行操作,例如包上包装袋(过滤,数据转换等等),称为中间操作
  • 流水线到底了,给他拿纸箱装起来(转换为其他类型返回),称为终端操作

工作人员:Filter(过滤)、Map(映射)、sort(排序),distinct(去重)等等

示例:

List<String> strs = ArrayList.asList("one","two","three","four","five");
// Stream操作
List<String> newStrs = strs.stream()
    .filter(s -> s.startsWith("t"))
    .map(String::toUpperCase)
    .sorted()
    .collect(toList());
System.out.println(newStrs);
  • 使用stream()将集合类型数据转化为流水线。
  • filter() 工作人员过滤出 “t” 开头的数据,剩下的不要,拿到流水线外。
  • map() 工作人员将剩下的每个数据转化为大写。
  • sorted() 工作人员给剩下的数据排序。
  • collect() 工作人员使用函数toList() 将剩下的数据转换为一个新的List并返回。

所以,输出结果应该是 : [ TWO , THREE ]

2.1 各类型转化为流

数组使用Stream.of() 方法

集合使用集合类对象的stream()方法

文本文件使用Files.lines()方法

示例:

//数组
String[] arr = {
   "one","two","three","four","five"};
Stream<String> arrStream = Stream.of(arr);

Stream<String> arrStream = Stream.of("one","two","three","four",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值