Lambda表达式和Stream流的简单使用

Lambda表达式和Stream流的简单使用

Lambda表达式:

lambda表达式是Java8中提供的一种新特性,它支持java也能进行简单的函数式编程,是直接对于其中的lambda抽象,是一个匿名函数,即没有名称的函数。

以前将某些功能传递给某些方法总要写匿名内部类,不用创建类对象,也是对Java的一种简化。

例如方法实现conparator的比较,创建Comparator接口的匿名内部类对象,在匿名内部类中重写comparator方法,实现比较。

al.sort(new Comparator<String>() {//传进来的是接口,要莫是实现类,要莫是接口,
            @Override
            public int compare(String o1, String o2) {
                return 0;
            }
        });

lambda表达式是对匿名内部类的一种简化,直接将接口中方法的实现作为参数进行传递,括号里面写要传递的参数,因此又被称为函数表达式。(a,b)->{return 0;}; 匿名函数,可以将匿名函数代码块作为参数进行传递,语法就更加简单,body体中只有一行代码时,可以不要{}。而且被实现的接口中只能又一个抽象方法,Lambda表达式的返回类型不是接口中方法的返回类型,而是接口类型。

al.sort((a, b) -> {
            return 0;
        });
​
/* lambdeDeom ld = ((a,b)->{
            System.out.println("hello");   类的实现在此重写,包装
        });*/
        lambdeDeom ld = ((x, y) -> {
            System.out.println("hello");
            return x + y;//传进来和使用保持一致
        });
        int d = ld.test2(10, 5);//这边才传用的值
        System.out.println(d);//遍历也可以用lambda表达式
        al.forEach((e) -> {
            System.out.println(e);
        });

使用@FunctionalInterface修饰的接口就是功能函数接口,只允许有一个抽象方法

@FunctionalInterface
//lambda表达式的接口里面只能写一个抽象方法,因为若有多个,那边方法体中不知道调用哪一个
//使用@FunctionalInterface修饰的接口就是功能函数接口,只允许有一个抽象方法
public interface lambdeDeom {
    //void test();
    // void test1(String a,String b);
    int test2(int a, int b);//抽象方法。
}

Stream流

Stream流是与IO流完全不同的流,它是提供对集合和数组进行更丰富的操作,而且还不影响原集合和原数组的数据。

获取流

获取流的四种方式

集合获取

Stream<String> stream = al.stream();//将集合中的元素添加到流中

数字组获取

//数组获取流  Arrays.stream(数组)
        int [] x={1,2,3,4};
        IntStream stream1 = Arrays.stream(x);

Stream.of获取,它的长度是可变的,里面存在自增

//Stream.of(1, 2, 3, 4, 5)直接获取流
        Stream<Integer> stream2 = Stream.of(1, 2, 3, 4, 5);//可变长度参数

字符流中read.lines();可以将程序中字符存入到Stream中

对流进行操作,分为中间操作和终端操作

中间操作:可以有多个,每次可以返回一个新的流,可进行链式操作。

终端操作:只能有一个,而且执行完,这个流也用完了,后面不能在执行新的操作,因此也是放在最后。

* 流操作
        *    中间操作   返回的还是Stream过滤,排序,去重...
        *    终端操作   获取你最终想要的数据  tolist  toset  max min
        * */
   List<String> c = stream.filter((e) -> {return e.equals("c");})//中间操作,返回的还是stream
                               .collect(Collectors.toList());//终端操作

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值