JDK1.8新特性知识点梳理

JDK1.8新特性知识点梳理

引言
由于刚刚换份工作,之前公司用的是JDk1.7,新公司用的JDK1.8,虽然之前对JDK1.8有过零零碎碎的了解,但是还是不是非常系统,今天乘着空余时间,梳理一下JDK1.8新增的一些特性!

特性详解

1.接口的默认方法(default关键字)

开始学习之前,我们先看一段Iterable接口源码

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {

    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

在上面的代码中,我们看到接口实现了remove()forEachRemaining(Consumer<? super E> action)方法;
而在实现类中可以选择实现default方法,也可以不实现,实现的话就相当于覆写该方法,遵循Java多态的特性。

个人理解,在接口中使用default关键字,实现了接口方法,相当于给该接口方法默认了一个模板实现,从而减少大量该方法的覆写,减少代码量!同时保持了接口的使用方式!

lambda表达式

在学习前,我们先看一段关于Runnable接口的代码

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}
public static void main(String[] args) {
		//原始实现方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("简单的线程编程JDK1.8以前");
            }
        }).start();
        //lambda实现方式
        new Thread(()->{System.out.println("Lambda可读性强一些");}).start();
        //lambda简洁版
        new Thread(()->System.out.println("Lambda简洁一些")).start();
    }

在·Runnable接口中,只有run()一个函数,且该函数没有参数,故而Runnable实现的表达式是:
() -> System.out.println("简单的线程编程JDK1.8")

下面我们再看一个有参的lambda的表达表达式实现方式

@FunctionalInterface
public interface Comparator<T> {
  int compare(T o1, T o2);
}
public static void testComparatorLambda(){
        List<Integer> names = Arrays.asList(1, 10, 3, 2,1);
        //原始实现方式
        Collections.sort(names, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        /***********************************************************************************/
        //lambda实现方式
        Collections.sort(names,(Integer o1,Integer o2)->{
                        return o1.compareTo(o2);
                      } );
       //lambda简介方式
       //Java编译器可以自动推导出参数类型,所以可以不用再写一次类型
       Collections.sort(names,( o1, o2)->o1.compareTo(o2));
                      
    }

上面为lambda带参数的实现方式:
Collections.sort(names,( o1, o2)->o1.compareTo(o2));

看完上面的示例,相信对lambda的使用方式有了一个大致的了解,在这里我们要提出一个新的知识点函数式接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值