JDK1.8新特性

JDK1.8新特性

  1. 函数式接口

    定义:就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

    使用:在接口上面使用@FunctionalInterface注解表明该接口是一个函数式接口

    示例

    @FunctionalInterface
    public interface TestService {
        void test01();
    }

    如果写两个接口则报错

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bthaHw6R-1604480076350)(C:\Users\hang_yang2\AppData\Roaming\Typora\typora-user-images\image-20201030084046709.png)]

    作用:函数式接口可以对现有的函数友好地支持 lambda。

  2. lambda表达式

    1. 定义:lambda表达式是实现函数式接口的一个快捷方式,前提必须是函数式接口

    2. 语法:三要素(参数,箭头,代码)

      (参数1,参数2…) -> {方法内容}

    3. 使用:

    如下示例线程开启普通方式

    	public static void main(String[] args) {
            Runnable runnable1 = new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 10; i++) {
                        System.out.println("线程1启动了"+i);
                    }
                }
            };
    //        runnable1.run();
            new Thread(runnable1).start();
        }

    使用lambda表达式

    		Runnable runnable2 = () -> {
                for (int i = 0; i < 10; i++) {
                    System.out.println("线程2启动了"+i);
                }
            };
            new Thread(runnable2).start();
    1. 自定义函数式接口实现lambda表达式

    接口内容

    @FunctionalInterface
    public interface TestService {
        void test01(String name);
    
    }

    使用lambda表达式实现这个接口

            TestService testService = (String str) -> {
                System.out.println(str);
            };
            String name = "Hello World!";
            testService.test01(name);
  3. stream流

    1. 介绍

      java8新增了stream流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。

    2. 使用

    List<Person> personList = new ArrayList<>();
            personList.add(new Person("zs",18));
            personList.add(new Person("ls",25));
            personList.add(new Person("ww",20));
            personList.add(new Person("xds",23));
            personList.add(new Person("as",19));
            personList.add(new Person("cv",20));
    
    		//过滤长度大于等于3的name
            personList.stream().filter(person -> person.getName().length() < 3).forEach(person -> System.out.println(person.getName()));
    
    		//foreach循环集合
    
            //将所有的name组成一个新的集合
            List<String> nameList = personList.stream().map(person -> person.getName()).collect(Collectors.toList());
            System.out.println(nameList);
    
    		//将所有的name组成一个字符串
            String collect = personList.stream().map(person -> person.getName()).collect(Collectors.joining(","));
            System.out.println(collect);
    
            //获取集合中age的和
            long sum = personList.stream().mapToLong(Person::getAge).summaryStatistics().getSum();
            System.out.println(sum);
    
    		//获取集合中age的和
            long sum2 = personList.stream().mapToLong(Person::getAge).sum();
            System.out.println(sum2);

long sum2 = personList.stream().mapToLong(Person::getAge).sum();
System.out.println(sum2);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值