Java8新特性简介

《QGIS快速入门与应用基础》079:KML/KMZ格式:Google Earth兼容 KML/KMZ是专为地理可视化设计的空间数据格式,原生兼容Google Earth,支持点线面要素标注与多媒体集成。KML为XML文本格式,KMZ是其压缩版本。该格式优势在于可视化表现力强、跨平台共享便捷,适合地理标注、路线分享等场景,但存在属性支持弱、大数据量处理效率低等局限。QGIS中可便捷加载和导出KML/KMZ数据,需注意编码设为UTF-8、勾选"导出样式"以保留可视化效果。建议中小规模标注数据使用KMZ格式,确保关联资源完整,提升共享效率。 阅读详情

前言

Java8即JDK版本1.8,Java8与Java8之前的JDK版本的内容相差还是很大的,其中最主要的因该就是Lambda 表达式和 Stream API了。

Java8的优点:

1.速度更快
2.代码更少(增加了新的语法lambda表达式)
3.强大的Stream API
4.便于并行
5.最大化减少空指针异常Optional

其中最为核心的就是Lambda表达式和Stream API

为什么使用Lambda表达式?

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语法表达能力得到了提升。

Lambda 表达式的基础语法

/*
Java8引入了一个新的操作符 "->" 该操作符称为箭头操作符或Lambda 操作符
 * 左侧:Lambda 表达式的参数列表
 * 右侧:Lambda 表达式中所需执行的功能,即Lambda体
 *
 * 语法格式1:无参数,无返回值
 *     () -> System.out.println("hello lambda");
 *
 * 语法格式2:有一个参数,并且无返回值
 *     (x) -> System.out.println(x);
 *
 * 语法格式3:若只有一个参数,小括号可以省略不写
 *     x -> System.out.println(x);
 *
 * 语法格式4:二个以上的参数,有返回值,并且Lambda体中有多条语句
 *     有多个Lambda提必须使用大括号
 *     Comparator<Integer> com = (x,y) -> {
 *        System.out.println("test3");
 *        return Integer.compare(x,y);
 *     };
 * 语法格式5:若Lambda体中只有一条语句, return 和 大括号都可可以省略不写
 *     Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
 *
 * 语法格式6:Lambda表达式的参数列表的数据类型可以省略不写
 * 
 * 2.Lambda表达式需要“函数接口”的支持
 * 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口,可以使用注解,@FunctionalInterface 修饰
 *            可以检查是否是函数式接口
 * /

Java8 内置的四大核心函数式接口

1.Consumer :消费型接口
void accept(T t);

Supplier : 供给型接口
T get();

3.Function<T, R> : 函数型接口
R apply(T t);

4.Predicate : 断言型接口
Boolean test(T t);

示例

public class Lambda4 {

    //1.Consumer<T> :消费型接口
    @Test
    public void test1(){
        happy(1000,(m) -> System.out.println("happy"+m));
    }

    public void happy(double money, Consumer<Double> con){
        con.accept(money);
    }
    //2.Supplier<T> : 供给型接口
    @Test
    public void test2(){
        List<Integer> num = getNumList(10, () -> (int)(Math.random() * 100));
        for (Integer nums: num) {
            System.out.println(nums);
        }
    }

    /**
     * 随机产生整数
     * @param num
     * @param sup
     * @return
     */
    public List<Integer> getNumList(int num, Supplier<Integer> sup){
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++){
            Integer n = sup.get();
            list.add(n);
        }
        return list;
    }
    //3.Function<T, R> : 函数型接口
    @Test
    public void test3(){
        //去除首尾空格
        String result= strHandler("  s sss ", (str) -> str.trim());
        System.out.println(result);
    }

    /**
     * 用于处理字符串
     * @param str
     * @param fun
     * @return
     */
    public String strHandler(String str, Function<String, String> fun){
        return fun.apply(str);
    }
    //4.Predicate<T> : 断言型接口
    @Test
    public void test4(){
        List<String> list = Arrays.asList("hello", "hi", "joker", "king", "a");
        List<String> strList = filterStr(list,(s) -> s.length() > 3);
        for (String str: strList) {
            System.out.println(str);
        }

    }
    public List<String> filterStr(List<String> list, Predicate<String> pre){
        List<String> stringList= new ArrayList<>();
        for (String str: list) {
            if(pre.test(str)){
                stringList.add(str);
            }
        }
        return stringList;
    }
}

方法引用与构造器引用

一.方法引用:若Lambda 体中的内容有方法已经实现了,我们可以使用”方法引用“(可以理解为方法引用是Lambda 表达式的另一种表现形式)
主要有三种语法格式:

  1. 对象::实例方法名
  2. 类::静态方法名
  3. 类::实例方法名

注意:
1.Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致!
2.若Lambda 参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用 类名::方法名

  @Test  //对象::实例方法名
    public void test1(){
        PrintStream ps1 = System.out;
        Consumer<String> con = (x) -> ps1.println(x);

        PrintStream ps = System.out;
        Consumer<String> con1 = ps::println;

        Consumer<String> con2 = System.out::println;
        con2.accept("aaaa");

    }

    @Test
    public void test2(){

        UserOrder order0 = new UserOrder("年会", "张三", 1);

        Supplier<String> sup = () -> order0.getPhotographerName();
        String str = sup.get();
        System.out.println(str);

        //方法引用
        Supplier<String> sup2 = order0::getPhotographerName;
        String str2 = sup2.get();
        System.out.println(str2);
    }
    @Test //类::静态方法名
    public void test3(){
        Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

        Comparator<Integer> com1 = Integer::compare;
    }

    @Test //类::实例方法名
    public void test4(){
        BiPredicate<String, String> bp = (x, y) -> x.equals(y);

        BiPredicate<String, String> bp2 = String::equals;

    }

二:构造器引用

格式:
类名::new

注意:
需要调用的构造器的参数列表要与函数式接口中的抽象方法的参数列表保持一致

    @Test //构造器引用
    public void test5(){
        Supplier<UserOrder> sup = () -> new UserOrder("年会", "张三", 1);
        UserOrder str = sup.get();
        System.out.println(str);

        Supplier<UserOrder> sup2 = UserOrder::new;
        UserOrder str2 = sup2.get();
        System.out.println(str2);
    }

三:数组引用
数组类型::new

    @Test //数组引用
    public void test6(){
        Function<Integer, String[]> fun = (x) -> new String[x];
        String[] strs = fun.apply(10);
        System.out.println(strs.length);

        Function<Integer, String[]> fun2 = String[]::new;
        String[] strs2 = fun2.apply(20);
        System.out.println(strs2.length);
    }
C# WPS操作PPT,全屏,缩率图,备注,跳转播放 本文介绍了一个使用C#开发的PPT操作工具,主要功能包括检测当前打开的PPT文件、获取选中PPT路径、指定播放PPT、获取PPT页面序号和缩略图、提取备注内容等。文章展示了操作界面效果图,并重点解决了用户手动退出PPT后重新获取路径时报错的问题。核心代码实现了通过WPS API进行PPT文件的打开、全屏播放、页面跳转、获取当前页位置等功能,同时支持生成PPT缩略图预览和备注信息提取。当用户未通过工具按钮打开PPT时,程序会自动初始化PPT信息确保功能正常使用。 阅读详情

相关推荐

从零搭建智能视觉小车:OpenART图像处理+增强现实避坑指南

本文详细指导如何从零搭建智能视觉小车,重点介绍OpenART图像处理与增强现实技术在AprilTag识别中的应用。涵盖硬件选型、环境配置、算法优化及实战调试全流程,特别分享智能汽车竞赛中的避坑技巧和优化方案,帮助开发者构建稳定高效的视觉系统。

yhn456789的博客 1055

Java 8

用了一年多的Java8之后,总体感觉Java8的两大功能更新:Lambda表达式和Stream API,是不错的,确实提高了开发效率。Java8是2014年3月份正式Release的,可以看成是自Java5以来最具革命性的版本。 总体来说Java 8 的新特性: 代码更少 强大的Stream API 速度更快 最大化较少空指针异常:Optional Nashron引擎,允许在JVM上运行JS应用...

huxiutao的博客 641

SAP FICO实操:如何修改已发生业务数据的成本中心公司代码(附RKACOR06程序运行指南)

本文详细解析了SAP FICO系统中使用RKACOR06程序修改已发生业务数据的成本中心和公司代码的实操方法。通过实战案例分享,提供从前期准备到后期验证的全流程指南,帮助企业应对组织架构重组或财务核算体系调整时的数据迁移挑战,特别适用于跨公司代码的成本中心划转场景。

weixin_27303545的博客 189

【JavaSE】java8 新特性

java8的好处: 速度更快、代码更少(Lambda表达式)、强大的Stream API、便于并行、最大化减少空指针异常(Optoinal)、Nashorn引擎,允许在JVM上运行JS应用等

T_158327的博客 945

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1175

madgwick算法基于MPU9250姿态融合漂移问题的原因

基于MPU9250的madgwick算法姿态漂移问题原因 0、声明 因为这个是现象是不是共性目前本人还没研究过,只是在个体问题研究的基础上得出的结论,或许我买到的MPU9250是一个盗版:),所以只具备参考性。 1、现象 使用MPU9250的加速度计、角速度计、磁力计(AK8963)原始数据输入到madgwick算法中,得到的姿态最终会在停止姿态变化后仍然漂移一小段时间。其中加速度计和角速度计读取速率为400hz,磁力计为100hz,加速度计采样范围±2g,角速度计采样范...

GreedyZombie的博客 3872

Java8的优势

为什么要选择Java81.可以让编写的代码更为简洁2.让我们更简单地使用了多核处理器3.默认方法 1.可以让编写的代码更为简洁 在Java 8里面,你可以编写更为简洁的代码,这些代码读起来更接近问题的描述。 Collections.sort(inventory, new Comparator<Apple>() { public int compare(Apple a1, Apple ...

qq_34556139的博客 2849

Redis Lua引擎UAF漏洞CVE-2025-49844深度剖析与复现实践

内存安全是软件系统稳定性的基石,其核心原理在于确保程序对内存的访问始终处于合法、受控的状态。在C/C++等手动管理内存的语言中,Use-After-Free(释放后使用)是一种典型的高危内存安全漏洞,它源于已释放的内存区域仍被程序指针引用,导致数据混乱或程序崩溃。这类漏洞的技术价值在于其往往能突破高级语言的安全边界,直接威胁进程本身,危害等级极高,常见于数据库、浏览器等核心基础设施。在Redis这样的高性能内存数据库中,其内置的Lua脚本引擎为复杂操作提供了强大支持,但同时也引入了沙箱环境下的复杂内存对象生

weixin_42530732的博客 365

java8的优点_java8的优缺点

Java 8 新增特性的优缺点想索取更多相关资料请加qq:649085085或登录http://www.doczj.com/doc/b1ace8dd4afe04a1b171de14.htmlPS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。Java 8或许是迄今为止最令人期待的Java版本,最初定于今年的9月份发布,但由于一系列的安全漏洞问题,目前已推迟到明年的3月份。Java 8试图“创新...

weixin_35822534的博客 566

强化学习(Q-learning、DQN) —— 理论、案例与交互式 GUI 实现

本文详细介绍了强化学习中基于值函数的 Q-learning 算法及深度强化学习的 DQN 方法,从基本理论、数学模型到算法流程均进行了全面阐述。通过迷宫导航、股票交易策略和机器人控制等典型案例,展示了强化学习在处理高维、非线性和时变问题中的强大适应性。为了帮助工程师和研究者更直观地理解强化学习的训练过程,本文还提供了一份基于 Python 与 PyQt6 实现的交互式 GUI 演示系统代码示例,用户可以在线调整参数,实时观察累计奖励和 Q 值的变化,从而更深入地理解算法收敛和策略演化的过程。

闲人编程的博客 1475

【新能源汽车测试工程师必看!DBC文件50条实战技巧,看懂这篇直接封神】

如果你是新能源汽车研发/测试工程师,还在为信号解析错误、报文找不到、DBC看不懂、实车故障复现不了头疼——那这篇文章,你一定要!在整车电控开发里,DBC = CAN总线的官方字典。没有DBC,报文就是一串乱码;读不懂DBC,测试寸步难行;用不好DBC,排查故障全靠猜。本文总结50条全网最实用、最贴近实车、最能解决问题的DBC技巧,从基础语法到新能源专用信号,从工具操作到故障排错,全部来自一线台架、实车、高压平台实战经验。不废话、不空谈、不玄学,全是能直接落地的硬货!

优快云-新能源汽车研发测试专业博主 1368

Java8新特性优点

Java 8 (又称为jdk 1.8) 是Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。 优点: 速度更快 代码更少(增加了新的语法:Lambda 表达式) 强大的Stream API 便于并行 最大化减少空指针异常:Optional Nashorn引擎,允许在JVM上运行JS应用 ...

L1ak的博客 727

ML307R OpenCPU TCP使用

实现现象 平台下发数据,板子在收到数据之后,马上再发送到平台,通过串口助手可以看到已经接收到数据。ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度。实验目的:实现把接收的数据再发送到服务端。因为是4G,所以必须用外网的。

面朝大海春暖花开 2232

Java 8新特性简介

Java 8新特性简介

xiaotai1234的博客 242

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java8新特性简介

java8新特性 github地址: https://github.com/lishanglei/java8-character 1.接口的静态方法和默认方法 java8之前,接口只允许存在抽象方法,即默认被public abstract修饰 java8新增静态方法和默认方法 1.1静态方法 1.接口中允许存在被static修饰的方法且该方法必须有方法体 2.接口中的static方法只能够被接口本身调用: 接口名.静态方法名(…) 3.接口的static方法不能被子接口继承 4.接口的static方法不能

qq_34069839的博客 161

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java8 新特性简介

目录 Java8新特性简介 一、Lambda表达式 1、Lambda表达式基础语法: 2、Lambda 表达式需要“函数式接口”的支持 二、函数式接口:Java8 内置的四大核心函数式接口 三、方法引用与构造器引用 四、Stream API 五、接口中的默认方法与静态方法 六、新时间日期API 七、Optional类 八、其他新特性 Java8新特性简介 速度更快(红黑树...

tiankong_12345的博客 230

重学Java 8新特性 | 第2讲——Java 8新特性简介

写在前面 从本讲开始,咱们就要开始正式学习Java 8新特性了,不知大家做好准备没有?做好准备之后,我就要开始发车了。 在这一讲中,我会对大家接下来要学习的Java 8新特性做一个整体的介绍,以便让大家从全局上对Java 8新特性有一个高屋建瓴的认识。 实际上,Java 8早在2014年3月份的时候就发布了,而现在已经是2021年12月份了,童鞋们,七年都已经过去了,你还有什么资格说你没学过Java 8新特性啊!你要知道,你已经学的是七年前的技术了啊!当然,未曾学过的童鞋也不要灰心,现在开始学一点都不晚,须

李阿昀的博客 1156

java8新特性Stream简介

Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

nhx900317的博客 363

JAVA8 新特性简介及示例

目录 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 特点: 速度更快(HashMap加哈希表,ConcurrentHashMap使用CAS,内存结构无永久区、新增元数据区使用物理内存) 代码更少(增加了新的语法 Lambda 表达式) 强大的 Stream API 便于并行(优化ForkJoin) ...

qqxhb 资源共享 300

Java8新特性简介:为什么要学习Java8

Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,距离现在已经有很长一段时间了,Java10也在2018年 3月 21日正式发布,并且Oracle宣布Java 语言将每隔 6 个月提供一次更新。Java语言不断更新迭代,然而很多Java程序员缺没有跟上技术更新的步伐!所以写下这篇系列文章,希望可以帮助大家入门Java8! 话不多说,开始发车! 宝刀未老的Java 1995...

qq_36199745的博客 249

Java8新特性简介(一)

Parameter: args

qq_36094023的博客 370

快速学习Java8新特性第一讲——Java8新特性简介

在这一讲中,大家要对接下来要学习的Java8新特性做一个粗略的了解,以便从全局上对Java8新特性有一个整体的认识。Java8好像是2014年3月份发布的,一直到2019年12月份,我才开始学习Java8新特性,确实是说不过去,现在开始学,还晚吗?不管了,直接学就行了!有一点我得说道说道,公司往往不是追求技术的新,而且追求技术的稳定,所以有可能在咱们的实际项目中还没有用到Java8新特性,学了它,...

李阿昀的博客 1091

【Java8 新特性 3】Supplier简介

在Java8中增加的接口Supplier,最适合用于表示工厂。带有Supplier的方法,通常应该限制输入工厂的类型参数使用有限制的通配符类型,以便客户端能够传入一个工厂,来创建指定类型的任意子类型。 应该将这些资源或者工厂传给构造器(或者静态工厂、或者构建器),通过他们来创建类。这个实践就被称做依赖注入,它极大地提高了类的灵活性、可重用性和可测试性。 简而言之,Supplier就是用来创建对象的,相当于new。 2、代码实例 package com.guor.effective.chapter2.java

m0_69745415的博客 2254

java 8 新特性简介

原文:http://www.ibm.com/developerworks/cn/java/j-lo-jdk8newfeature/index.html   Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性。其中主要的新特性涵盖:函数式接口、Lambda 表达式、集合的流式操作、注解的更新、安全性的增强、I...

xuyunti的博客 122

Java8新特性的简介

    Java8速度更快,优化更好,代码更少(增加了新的语法 Lambda 表达式),强大的Stream API便于并行执行代码,提高效率。Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API(java.util.stream.*)。1.Lambda 表达式    Lambda 是一个匿名函数,可以把Lambda 表达式理解为是一段可以传递的代码。...

wu_amber的博客 257

JAVA8新特性之入门简介

一:JAVA8新特性简介       1:速度更快              首先速度很快,它是体现在很多的方面,比如说它对底层的数据结构做了一定的更新的改动,对于垃圾回收机制              也就是内存结构也做了改变。改变的例子如下:               ⑴底层机构最核心的HashMap做了改动,原本HashMap是数组加上链表结构,现在JAVA8在原本的          ...

花&败 438
上一篇: OpenFeign服务调用
下一篇: Java8中的Stream API
与黑夜为伍
博客等级 码龄7年 19粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值