首页 > 其他分享 >jdk1.8新特性

jdk1.8新特性

时间:2023-07-11 20:34:58浏览次数:37  
标签:jdk1.8 省略 stream Stream 特性 方法 public lambda

1.default关键字

在jdk8之前,接口里面只能包含抽象方法,但是jdk8之后,允许使用default修饰的默认方法。

public interface NewCharacter {
    
    public void test1();
    
    public default void test2(){
        System.out.println("我是新特性1");
    }

}

default作用

所以说这个default方法是所有的实现类都不需要去实现的就可以直接调用,那么比如说jdk的集合List里面增加了一个sort方法,那么如果定义为一个抽象方法,其所有的实现类arrayList,LinkedList等都需要对其添加实现,那么现在用default定义一个默认的方法之后,其实现类可以直接使用这个方法了,这样不管是开发还是维护项目,都会大大简化代码量。

public class NewCharacterImpl implements NewCharacter{

    @Override
    public void test1() {
        
    }
    
    public static void main(String[] args) {
        NewCharacter nca = new NewCharacterImpl();
        nca.test2();
    }

}

2.lambda表达式

  • jdk8开始引用的新的语法格式
  • 作用:简化匿名内部类的代码写法
    lambda表达式的简化格式:
(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码。
}

//ps:->是语法形式,无实际含义
  • lambda表达式只能简化函数式接口的匿名内部类的写法形式

ClassName :: methodName

jdk1.8提供了另外一种调用方式::,当 你 需 要使用 方 法 引用时 , 目 标引用 放 在 分隔符::前 ,方法 的 名 称放在 后 面 ,即ClassName :: methodName 。例如 ,Apple::getWeight就是引用了Apple类中定义的方法getWeight。请记住,不需要括号,因为你没有实际调用这个方法。方法引用就是Lambda表达式(Apple a) -> a.getWeight()的快捷写法,如下示例。

lambda的好处

lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简介、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升

lambda表达式的省略规则

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
  • 如果lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
  • 如果lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时必须省略“;”

3.什么是函数式接口

  • 首先必须是接口、其次接口中仅有一个抽象方法的形式
  • @FunctionalInterface//一旦加上这个注释必须为函数式接口,且只有一个抽象方法

Stream流

  • 在Java8 中,得益于Lambda所带来的函数式编程,引入 了一个全新的Stream流概念
  • 目的:用于简化集合和数组操作的API

Stream流思想的核心:

  1. 先得到集合或者数组的Stream流(就是一根传送带)
  2. 把元素放上去
  3. 然后用这个Stream流简化的Api来方便元素操作

Stream流的三类方法

  • 获取Stream流
    • 创建一条流水线,并把数据放到流水线上准备进行操作
  • 中间方法
    • 流水线上的操作。一次操作完毕之后,还可以继续进行其他操作
  • 终结方法
    • 一个Stream流只有一个终结方法,是流水线上的最后一个操作

获取Stream流

  1. 集合获取Stream流的方式
  • 可以使用Collection接口中默认方法stream()生成流
  1. 数组获取Stream流的方式
//集合数据流
        Collection<String> list=new ArrayList<>();
        Stream<String> stream = list.stream();

        //map
        Map<String,Integer> map=new HashMap<>();
        //键流
        Stream<String> stream1 = map.keySet().stream();
        //值流
        Stream<Integer> stream2 = map.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> stream3 = map.entrySet().stream();

        //数组
        String[] name={"dasf","dfa","dfa"};
        //public static <T> Stream<T> stream(T[] array) 
        Stream<String> stream4 = Arrays.stream(name);
        //public static<T> Stream<T> of(T... values) {
        Stream<String> stream5 = Stream.of(name);

Stream流的常用API(中间方法)

image

注意:

  • 中间方法也称非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。
  • 在Stream流中无法直接修改集合、数组的数据

案例api-lambda-app-----d13-demo

Stream流的收集操作

  • 收集Stream流的含义:就是把Stream流操作后的结果数据传回到集合或者数组中去。(Stream流:方便操作集合/数组的手段)
  • 集合/数组才是开发目的。

Stream流的收集方法 api-lambda-app-----d13-demo2

image
注意:流只能使用一次

标签:jdk1.8,省略,stream,Stream,特性,方法,public,lambda
From: https://www.cnblogs.com/yliunyue/p/17545826.html

相关文章

  • Xmake v2.8.1 发布,大量细节特性改进
    Xmake是一个基于Lua的轻量级跨平台构建工具。它非常的轻量,没有任何依赖,因为它内置了Lua运行时。它使用xmake.lua维护项目构建,相比makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。我们......
  • vue(九)vue3新特性
    vue3六大亮点:性能比Vue2强可以将无用模块去掉,仅打包需要的组合API碎片(fragment),portal传送门(teleport),悬念(suspense)更好的TS支持暴露了自定义渲染APIsetup()在setup函数中声明对象,代替data()。ref声明简单对象,reactive声明复杂对象。<template><h3>{......
  • Deepin安装jdk1.8
    一、部署环境jdk:Orcal登录下载jdk-8u371-linux-x64.tar.gzLinux操作系统:Deepin20二、命令安装1.建立文件夹sudomkdir/usr/lib/jdk/2.在下载目录下解压jdk至创建的文件夹sudotarxvfjdk-8u281-linux-x64.tar.gz-C/usr/lib/jdk/ps:tar–xvffile.tar-C需要解压到......
  • OpenFeature 特性flag 标准协议
    OpenFeature属于cncf一个沙箱项目OpenFeature特性社区驱动的标准协议一个sdk可以支持各种后端目前包含了不少支持工具(包含了开源的以及商业工具)支持不少客户端(目前支持了js,java,golang,c#,php)核心概念OpenFeature提供了一些核心概念Evaluationapi -Evaluationcont......
  • C#之特性
    自定义自己的特性方法 MyCustom[AttributeUsage(AttributeTargets.Class|AttributeTargets.Field|AttributeTargets.Method,Inherited=true,AllowMultiple=true)]publicsealedclassMyCustomAttribute:Attribute{publicMyCustomAttribute()......
  • ECMAScript 2023 正式发布,有哪些新特性?
    从头到尾搜索数组:findLast()、findLastIndex()从末尾开始搜索 ......
  • JDK1.5 与 JDK1.6的新特性
    JDK1.5与JDK1.6的新特性收藏 一、JDK1.5的新特性       了解Java语言的特色及相关术语       泛型:泛型、通配符、有限制通配符、泛型方法       加强循环       自动装箱/拆箱       枚举       可变参数       静态......
  • 特性介绍 | MySQL测试框架 MTR 系列教程(四):语法篇
    作者:卢文双资深数据库内核研发序言:以前对MySQL测试框架MTR的使用,主要集中于SQL正确性验证。近期由于工作需要,深入了解了MTR的方方面面,发现MTR的能力不仅限于此,还支持单元测试、压力测试、代码覆盖率测试、内存错误检测、线程竞争与死锁等功能,因此,本着分享的精神,将其......
  • ES6 的 新特性 3 箭头函数
    箭头函数的作用:1.比function这种写法更加简洁;2.可以解决thsi指向的问题,因为它不会创建自己的this,而是继承上一级作用域的this。使用场景:1.当函数内部不需要用到this的时候,都可以用箭头函数代替function;2.需要this,但是需要的是上一级作用域的this。箭头函数的几种写法:......
  • ES6 的 新特性 4 剩余参数,对象值省略
    剩余参数用于声明不确定参数数量的函数functionsum(first,...args){console.log(first);//10console.log(args);//[20,30]}sum(10,20,30)箭头函数也可以用constsum=(...args)=>{lettotal=0;args.forEach(item=>total+=i......