Java深入 - jdk8特性

JDK1.8中文API文档及Java 8特性深入解析 Lambda表达式是Java 8引入的一种简洁的表示可传递的匿名函数的方式,使得Java语言支持了函数式编程。Lambda表达式可以被看作是匿名内部类的简化表达,其基本构成包括参数、箭头(->)和函数体。参数和函数体都可选。具体形式可以表示为:(参数1, 参数2…) -> { 函数体 }。// 一个简单的Lambda表达式示例:一个无参、无返回值的Lambda表达式Lambda表达式要求参数类型可以省略(编译器根据上下文进行推断),如果参数只有一个,连圆括号也可以省略; 阅读详情

1. 接口提供默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可

public interface Test {
    
    int get();

    /* JAVA8 接口默认方法*/
    default int getVal(int a) {
        return a * 2;
    }

}

public class Test2 {

    public static void main(String[] args) {
        Test test = new Test() {

            @Override
            public int get() {
                return getVal(2); //调用接口默认方法
            }

        };

        System.out.println(test.get());
    }

}
2. Lambda 表达式

public class Test2 {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("c");
        list.add("A");
        list.add("b");
        list.add("d");

        /* forEach */
        list.forEach((String e) -> {
            System.out.println(e);
        });

        /* 排序 */
        Collections.sort(list, (String a, String b) -> {
            return b.compareTo(a);
        });

        list.forEach((String e) -> {
            System.out.println("=====" + e);
        });

        /* Map遍历方式 */
        Map<String, String> map = new HashMap<String, String>();
        map.put("a", "aaaaaaaaa");
        map.put("b", "bbbbbbbbb");
        map.put("c", "ccccccccc");
        map.put("d", "ddddddddd");

        /* Map遍历 */
        map.forEach((a, b) -> {
            System.out.println("key:" + a + "|val:" + b);
        });

    }

}

3. 函数式接口

    @FunctionalInterface
    interface Converter<F, T> {
        T convert(F from);
    }

    public static void main(String[] args) {

        Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
        Integer converted = converter.convert("123");
        System.out.println(converted); // 123

    }

4. 访问默认的接口

1. Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

    public static void main(String[] args) {

        /* Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非) */
        Predicate<String> predicate = (s) -> (s.length() > 0 && s.length() < 10);

        System.out.println(predicate.test("test22222222222222222222")); // false
        System.out.println(predicate.negate().test("test2")); // false 结果反着来了

        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects::isNull;

        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();

    }
2. Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法

    public static void main(String[] args) {

        /* Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法 */
        
        /* 入参String => 返回Integer*/
        Function<String, Integer> toInteger = (s) -> {
            return NumberUtils.toInt(s, 0);
        };
        System.out.println(toInteger.apply("213213"));
        
        /* 入参Integer => 返回Integer*/
        Function<Integer, Integer> add = (s) -> {
            return s + 100;
        };
        System.out.println(add.apply(200));

    }
3. Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数

    public static void main(String[] args) {

        /* Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数 */
        Supplier<Person> personSupplier = Person::new;
        Person person = personSupplier.get();
        person.setAge(100);

        System.out.println(person.getAge());

    }
4. Consumer 接口表示执行在单个参数上的操作。

Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName);
greeter.accept(new Person("Luke", "Skywalker"));
5. Optional 接口防止空指针操作
    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("c");
        list.add("A");
        list.add("b");
        list.add("d");
        

        /* Optional 主要用于防止传入的参数为null */
        Optional<String> optional = Optional.of("aa"); //  null 则会直接报错
        System.out.println(optional.get());
        
        Optional<List<String>> optional2 = Optional.of(list);
        System.out.println(optional2.get());
        System.out.println(optional2.isPresent()); //非空值 true

    }


6.


Java 8 JDK 8u161 for Linux x64版本特性解析 Java 8,作为这个经典编程语言的一个重要里程碑版本,在2014年3月发布,它带来了一系列的重大更新和改进,旨在提高开发者的生产力并强化Java平台的功能性。这一版本的重大变革之一是引入了函数式编程的概念,让Java语言能够更好地适应现代编程范式。此外,Java 8还提供了新的日期时间API,增强了集合框架的能力,提供了对并发处理的改进,以及优化了性能。函数式接口是Java 8中另一个核心概念。函数式接口就是一个只有一个抽象方法的接口,可以用注解来标记,虽然这不是强制要求。 阅读详情

相关推荐

掌握Android开发中的Java JDK 1.8特性

Java 1.8引入了Lambda表达式、Stream API、接口默认方法、新的日期时间API以及方法引用等重要特性。这些特性不仅提升了开发者的生产力,而且加强了Java语言的函数式编程能力。Lambda表达式:简化了代码,提高了并发编程的效率,使得集合操作更加直观。Stream API:提供了一种高效且易于理解的数据处理方式。接口的默认方法:为接口添加了行为,使得库的升级变得平滑,无需破坏现有的实现。默认方法通过在接口中使用default。

weixin_28913879的博客 708

jdk8新特性

Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:左侧:指定了 Lambda 表达式需要的参数列表 右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能。只包含一个抽象方法的接口,称为函数式接口。你可以通过 Lambda 表达式来创建该接口的对象。

jiapu_的博客 3315

Java JDK 8新特性全面解析与实践

在Java 8之前,接口(interface)是定义一组抽象方法和常量值的结构,它定义了一种契约,让实现该接口的类必须实现其所有的方法。这种设计原则在当时的许多场景下非常有效,然而随着编程实践的不断发展,它也逐渐暴露出一些局限性。一个主要的局限性是接口无法进行修改,一旦一个接口被广泛实现,添加新的方法就会破坏已有的实现,因为这些类没有实现新添加的方法。这就是所谓的“二进制兼容性”问题。如果接口发生变化,所有实现了这个接口的类都需要更新以匹配新的接口定义。

weixin_42577243的博客 1121

JDK8 新特性-----对象::new

public class demo { public static void main(String[] args) { //第一种方式 ICar iCar1 = new ICar() { @Override public Car getCar(String name, Integer money) { return new C...

习惯沉淀_ 2963

Java JDK 8环境软件安装包及新特性介绍

Java JDK,即Java Development Kit,是Java应用程序开发的核心工具包。它包含了用于开发、编译、调试Java程序所需的所有工具和库。JDK的出现可以追溯到1990年代中期,当时为了提供一个编写一次、到处运行的平台,Sun Microsystems公司推出了Java。在Java的发展历程中,JDK经历了多次更新,每一次更新都在语言、性能、安全性和易用性等方面带来了显著的改进。

weixin_42560991的博客 498

全面讲解Java JDK8新特性与代码实践

Lambda表达式是一种简洁的代码写法,用于表示仅包含单个方法的接口的实例。在Java中,它们经常用于简化事件监听器和其他回调的代码。例如,之前需要一个类来实现一个接口,实现它的方法,然后实例化这个类。现在可以用Lambda表达式来快速实现相同的功能。// 传统的匿名内部类实现@Override");}).start();// Lambda表达式实现函数式编程关注点在于函数的使用,包括函数的一等公民地位(函数可以作为参数传递、返回值、变量赋值),以及无副作用的特性。

weixin_35749786的博客 797

Java高级--JDK8新特性

lambda表达式特殊的匿名内部类,语法更简洁;lambda表达式允许把函数作为一个方法的函数(函数作为方法的参数传递),将代码像数据一样传递;注函数式接口接口中只有一个抽象方法(参数1,参数2)抽象方法的参数->分隔符{}表示抽象方法的实现我们创建线程任务时,之前使用的有两种方式,从上面两种方式可以发现我们真正需要的只是run方法中的方法体从JDK8之后加入了lambda表达式,我们创建线程任务的方式也有了第三种方式;.........

Dumpling_skin的博客 666

Halcon Camera-calibration 相关算子(一)

Halcon Camera-calibration 相关算子介绍

qq_44744164的博客 1366

JDK8_方法引用

JDK8_方法引用 Lambad 表达式是基础,我们在熟悉 Lambad 后,可以直接通过方法应用来简写 Lambad 表达式中已经存在的方法。 方法引用通过方法的名字来指向一个方法 方法应用可以使用代码变得简洁优雅,减少冗余代码 方法的引用使用一对冒号 :: 代码例子 - 1: package com.example.demo.methodreference; import java.util.Arrays; import java.util.List; /** * @author LaIWe

不负年华 561

python123题目——摩尔斯电码转换

类型:列表元组。

m0_62488776的博客 4416

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 649

JDK8新特性:

java基础--jDK8新特性

m0_49102053的博客 2025

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

Java8(JDK1.8)新特性

1、速度快;2、代码少、简介(新增特性:lamdba表达式);3、强大的Stream API;4、使用并行流和串行流;5、最大化较少空指针异常Optional;其中最为核心的是Lambda表达式和Stream APILambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。...

weixin_40294256的博客 5万+

四、SVN客户端tortoiseSVN的基本功能介绍

档案浏览器(Repo-browser) 鼠标右键–>tortoiseSVN->版本库浏览器 输入版本库URL地址,进入如菜单界面 版本库浏览器支持SVN及http两种最常用的通信协议 SVN服务器访问方式 方法 模式 访问方法 File:// 直接版本库访问(本地磁盘) http:// 通过配置subversion的WEB服务器的WEBDAV协议 http...

也许是我送你哦 1011

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2854

【Java】新特性演进:从JDK 8到JDK 21

Java版本演进与核心特性摘要 本文全面梳理了Java从JDK 8到JDK 21的主要版本演进与核心特性: 版本概览:重点介绍了JDK 8、11、17、21四个LTS版本的核心特性与生命周期 JDK 8革命性特性: Lambda表达式实现函数式编程 Stream API提供声明式集合操作 Optional优雅处理空指针 全新DateTime API解决日期时间问题 JDK 11现代化改进: var局部变量类型推断 标准HTTP Client API 字符串处理增强方法 JDK 17类型安全: Records

瘦到被风吹走的博客 1998

将任意文件转换为Pcap网络数据包传输

一款实用的工具用于将任意文件转换为pcap网络数据包

村中少年的专栏 3188

Java中的JDK8及后续的重要新特性

函数式接口:接口中有且仅有一个抽象方法,但是可以有多个其他的方法检测某个接口是否是函数式接口// 只有一个抽象方法void eat();// 可以有多个默认方法// 可以有多个静态方法面向对象思想:强调对象如何完成任务函数式编程思想:强调是否完成任务(参数列表) -> {// 方法体(参数列表):表示重写的方法对应的参数,此位置可以省略参数类型保留参数名,如果只有一个参数,则还可以省去参数列表的括号()->:将参数列表传入到方法体{}:定义重写方法的方法体。

小何代码咖啡馆 1397

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源?

所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。

qq_43416206的博客 1294

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java jdk 1.8特性_Java JDK 1.7 和 JDK 1.8 新特性

引言本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性。JDK 1.7 新特性1. switch可以接受String类型;public class Switch {public void test(String str) {switch (str) {case "computer":System.out.println("computer");break;case "book":Sy...

weixin_39574943的博客 270

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

自 JDK 8 到 JDK 21 以来所有 Java 和 JVM 特性的分类列表

请参看文章:自 JDK 8 到 JDK 21 以来所有 Java 和 JVM 特性的分类列表

weixin_43229159的博客 817

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java面试必备:JDK 8 新特性详解

Lambda 表达式是 JDK 8 最引人注目的特性之一,它允许我们将函数作为方法参数传递,使代码更加简洁。

qq_58299462的博客 826

Java_JDK8到JDK21各版本发行时间及重要特性

转载自:Java_JDK8到JDK21各版本发行时间及重要特性_jdk21和jdk1.8-优快云博客

qq_45856381的博客 449

jdk8新特性_Java系列之Java 8 新特性必知必会

课程目标:通过本课程的学习,详细掌握Java8新特性之接口默认方法、函数式接口、可重复注解、Optional;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项...

weixin_40009472的博客 85

Java JDK 1.7 和 JDK 1.8 新特性

引言   本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性。 JDK 1.7 新特性   1. switch可以接受String类型; public class Switch { public void test(String str) { switch (str) { case "computer": System.out.println("c...

weixin_30628077的博客 153
上一篇: Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程(22)
下一篇: Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler(23)
老码农zhuli
老码农zhuli 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄14年 2456粉丝 312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值