Java基础(23)-Java8的部分特性(了解)

1. Lambda表达式

  • 想使用Lambda表达式,必须是要接口为函数式接口;Lambda表达式的本质是函数式接口的实例;

  • 匿名实现类现在都可以使用Lambda表达式来表示;

  • Lambda的简单使用演示;

public class TestLambda {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("这是Lambda测试");
            }
        };
        //运行上面的多线程;
        new Thread(runnable).start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("************************");
        //这里使用Lambda表达式,编写上面的程序;
        Runnable run = () -> System.out.println("已经用了Lambda表达式");
        new Thread(run).start();
    }
}

结果:
2. 有参数的基本格式(无参数也是类似,基本格式不变):

 class test {
    public static void main(String[] args) {
    //先写括号填参数,标箭头,写内容;
        ThLambda thLambda = (String s) -> {
            System.out.println(s);
        };
        thLambda.test("这就是演示;");
    }
}

interface ThLambda {
    void test(String s);
}

2. 函数式接口

就是指接口只有一个抽象方法;这个接口使用了注解@FunctionalInterface,可以通过Lambda表达式来创建接口的对象;java 8中的函数式接口定义在包java.util.function中;

3. 方法引用与构造器引用

  1. 方法引用
class test {
    public static void main(String[] args) {
        /*方法引用,
         *方法一:  对象 :: 非静态方法
         * 方法二: 类 :: 静态方法
         * 方法三: 类 :: 非静态方法
         */
        PrintStream out = System.out;
        Consumer<String> con = out::println;
        con.accept("I am x");
    }
}

运行结果:
基本的函数式接口:

接口名抽象方法及用途参数返回类型
Consumer<T>accept(),给入参数,没有返回值Tvoid
Supplier<T>get(),没有参数 ,但有返回值T
Function<T,R>R apply(T t),对参数T进行处理,返回R型结果TR
Predicate<T>boolean test(T t),确定类型T的对象是否满足某些条件,并且返回boolean值Tboolean
  1. 构造器引用
    和方法的引用使用类似,主要使用就是: 类::new

  2. 数组引用
    将数组看成一个特殊的类即可,使用方式与构造器引用一样;

4. StreamAPI

  1. 创建StreamAPI总共有四种方式:
    通过集合创建:

            //第一种创建方式:通过集合创建
        /*其中Employees是我创建的一个类,employeedatas()是它的static方法;*/
        List<Employees> list = Employees.employeedatas();
        //创建一个顺序流
        Stream<Employees> stream1 = list.stream();
        //创建一个并行流,就像是多线程一样,不一定按顺序进行;
        Stream<Employees> stream2 = list.parallelStream();
    

    通过数组创建:

         //Employees[] arr =new Employees[] {new Employees(1, "dao"), new Employees(2, "sdd")};
        //上面的数组和下面的数组是一样的;
        Employees[] arr =  {new Employees(1, "dao"), new Employees(2, "sdd")};
        //通过数组创建
        Stream<Employees> stream = Arrays.stream(arr);   
    

    通过Stream的of创建

          Employees dao = new Employees(1, "dao");
        Employees sdd = new Employees(2, "sdd");
        //通过of直接创建;
        Stream<Employees> dao1 = Stream.of(dao, sdd);
    

    第四种:创建无限流
    通过Stream.iterare()和Stream.generate()方法创建;

5. Optional类

  1. Optional类(java.util.Optional)是一个容器类,主要就是用来存放一些类的值,而且值可以为null;
        //创建一个非空的实例,必须为非空
        Optional<Employees> o = Optional.of(new Employees(1, "dak"));
        //创建一个空的
        Optional o2 = Optional.empty();
                //先创建一个Optional实例
        Optional<Employees> o = Optional.ofNullable(e);
    
  2. 基本理解
        public String test5(Employees e) {
        //没有用Optional时的写法;
        /*if(e!=null){
            return "not null";
        }
        return null;*/
        //先创建一个Optional实例
        Optional<Employees> o = Optional.ofNullable(e);
        //万一这个e为空怎么办;可以先用预备一个不是空的对象放入,作为备选;
        Employees s = o.orElse(new Employees(1, "神"));
        //这样返回的就不会报空指针异常;
        return s.getName();
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值