![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK8新特性学习笔记
自己学习JDK8新特性的笔记
盘古给你一斧
这个作者很懒,什么都没留下…
展开
-
JDK7新特性之try-with-resources
JDK7新特性之try-with-resources本节内容并非JDK8的新特性,而是JDK7的新特性。此处讲解是因为多数人并不知道。传统方式在资源关闭时,需要对每个需要关闭的资源进行 手动调用close 方法来关闭方法。try-with-resources 方法可以省去传统方式繁琐的步骤,使代码更加简洁。功能用于资源关闭。注意实现了AutoCloseable接口的类,在try()里声明该类实例的时候,try结束后自动调用的close方法,这个动作会早于finally里调用的方法原创 2020-08-01 17:18:28 · 163 阅读 · 0 评论 -
JDK8新特性之新内存空间Matespace
JDK8新特性之新内存空间MatespaceJDK8中使用元空间Matespace 替代持久代 PermGen space持久代PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen s原创 2020-08-01 17:16:10 · 726 阅读 · 0 评论 -
JDK8新特性处理电商订单数据之答案讲解下集
JDK8新特性处理电商订单数据之答案讲解下集案例统计两个人的分别购买订单的平均价格public class Main { public static void main(String[] args) { //总价 35 List<VideoOrder> videoOrders1 = Arrays.asList( new VideoOrder("20190242812", "springboot教程", 3),原创 2020-07-31 10:13:30 · 154 阅读 · 0 评论 -
JDK8新特性处理电商订单数据之答案讲解上集
JDK8新特性处理电商订单数据之答案讲解上集案例统计出同时被两个人购买的商品列表(交集)public class Main { public static void main(String[] args) { //总价 35 List<VideoOrder> videoOrders1 = Arrays.asList( new VideoOrder("20190242812", "springboot教程", 3)原创 2020-07-31 10:12:22 · 188 阅读 · 0 评论 -
Collection和Lambda电商数据处理实战需求说明
Collection和Lambda电商数据处理实战需求说明实战案例电商订单数据处理,根据下面的 videoOrders1 和 videoOrders2 两个订单集合统计出同时被两个人购买的商品列表(交集)8-2统计出两个人购买商品的差集8-2统计出全部被购买商品的去重并集8-2统计两个人的分别购买订单的平均价格8-3统计两个人的分别购买订单的总价格8-3订单类public class VideoOrder { private String tradeNo;原创 2020-07-31 10:11:11 · 172 阅读 · 0 评论 -
Java8新特性JDK8之summarizing集合统计
Java新特性玩转JDK8之summarizing集合统计summarizing 资料summarizing 是用来做统计相关的东西分类(统计类型不同,使用方式相同)summarizingInt //统计int类型summarizingLong //统计Long类型summarizingDouble //统计Double类型summarizingInt源码示例public static <T> Col原创 2020-07-30 14:25:29 · 2664 阅读 · 0 评论 -
Java8新特性JDK8之收集器 group by进阶
Java新特性玩转JDK8之收集器 group by进阶功能直接返回分组后各组元素的数量。Map<String,Long>类型使用使用groupingBy 分组时,多传入一个参数 Collectors.counting()示例统计各个省份的学生数量。学生类public class Student { private String province; private int age; public Student(Stri原创 2020-07-30 14:24:18 · 490 阅读 · 0 评论 -
Java8新特性JDK8之收集器 group by分组
Java新特性玩转JDK8之收集器 group by分组功能按照参数返回值来对元素分组,可分为多组。示例根据学生所在的省份对学生进行分组。学生类public class Student { private String province; private int age; public Student(String province, int age) { this.age = age; this.provin原创 2020-07-30 14:23:03 · 1977 阅读 · 0 评论 -
Java8新特性JDK8之收集器 partitioningBy分组
Java新特性玩转JDK8之收集器 partitioningBy分组parttioningBy 分组按照参数条件将数据分为两组。结果为Map<boolean, List> 类型,一组为符合条件,另一组为不符合条件。示例找出集合中长度大于四 和 长度小于等于四的元素。public class Main { public static void main(String[] args) { List<String> list = Arrays原创 2020-07-30 14:21:42 · 337 阅读 · 0 评论 -
Java8新特性JDK8之joining函数
Java8新特性玩转JDK8之joining函数Collectors.joining 方法介绍该方法用来对流中元素字符串拼接,后以一个字符串进行显示。该方法有三种重载Collectors.joining();Collectors.joining("param");Collectors.joining("param1", "param2", "param3");无参数时public class Main { public static void main(String[]原创 2020-07-30 14:20:12 · 1163 阅读 · 0 评论 -
Java8新特性JDK8之collector收集器
Java新特性玩转JDK8之collector收集器流的collect()方法一个终端操作, 用于对流中的数据进行归集操作,collect方法接受的参数是一个Collector两个重载方法方法一 ,通常用来自定义返回值类型,但在实际开发中很少使用<R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R>combine原创 2020-07-30 14:18:42 · 279 阅读 · 0 评论 -
Java8新特性玩转JDK8之集合的foreach
Java8新特性玩转JDK8之集合的foreach功能遍历集合接口方法代码public interface Iterable<T> { ··· default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t)原创 2020-07-29 11:05:56 · 550 阅读 · 0 评论 -
Java8新特性玩转JDK8之reduce操作
6-2 Java新特性玩转JDK8之reduce操作功能聚合操作,中文意思是 “减少”根据一定的规则将Stream中的元素进行计算后返回一个唯一的值常用方法类型预览Optional reduce(BinaryOperator accumulator);T reduce(T identity, BinaryOperator accumulator);参数BinaryOperator accumulator中文意思累加器。继承BiFunction接口。常用方法详解Op原创 2020-07-29 11:04:08 · 1921 阅读 · 0 评论 -
Java8新特性JDK8之并行流parallelStream
Java新特性玩转JDK8之并行流parallelStream为什么会有这个并行流?集合做重复的操作,如果使用串行执行会相当耗时,因此一般会采用多线程来加快, Java8的paralleStream用fork/join框架提供了并发执行能力底层原理线程池(ForkJoinPool)维护一个线程队列可以分割任务,将父任务拆分成子任务,完全贴合分治思想stream和parallelStream区别public class Main { public static v原创 2020-07-29 11:02:22 · 3160 阅读 · 0 评论 -
Java8新特性JDK8之流操作max和min函数
Java新特性玩转JDK8之流操作max和min函数max函数功能根据条件找出集合中的最大值。代码示例返回学生对象集合中年龄最大的学生public class Main { public static void main(String[] args) { List<Student> list = Arrays.asList(new Student(32),new Student(33),new Student(21),new Studen原创 2020-07-28 17:44:03 · 1897 阅读 · 0 评论 -
Java8新特性JDK8之流操作allMatch和anyMatch函数
Java新特性玩转JDK8之流操作allMatch和anyMatch函数allMatch函数功能检查是否匹配所有元素,只有全部符合才返回true代码示例判断集合中是否所有元素长度大于5public class Main { public static void main(String[] args) { List<String> list = Arrays.asList("springboot", "springcloud", "red原创 2020-07-28 17:05:23 · 3004 阅读 · 0 评论 -
Java8新特性JDK8之流操作limit和sorted函数
Java新特性玩转JDK8之流操作limit和sorted函数sorted函数类型及功能sorted() 对流进行自然排序, 其中的元素必须实现Comparable 接口sorted(Comparator<? super T> comparator) 用来自定义升降序代码及示例sorted() 对流进行自然排序字母 a - z 升序public class Main { public static void main(String[] args) {原创 2020-07-28 17:03:25 · 943 阅读 · 0 评论 -
Java8新特性JDK8之流操作map和filter函数
Java新特性玩转JDK8之流操作map和filter函数map函数功能详情将流中的每一个元素 T 映射为 R(类似类型转换)使用场景转换对象,如javaweb开发中集合里面的DO对象转换为DTO对象示例当前端需要展示所有用户时,要避免返回过多信息,并防止暴漏数据库其他字段。定义User类,该类属性和数据库字段一 一对应。(id,用户名,密码)public class User { private int id; private原创 2020-07-28 16:57:54 · 2381 阅读 · 0 评论 -
Java8新特性JDK8之流Stream实战
Java8新特性JDK8之流Stream实战什么是Stream?Stream 中文称为 “流”,通过将集合转换为这么一种叫做 “流”的元素队列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的流水线操作元素是特定类型的对象,所以元素集合看作一种流, 流在管道中传输, 且可以在管道的节点上进行处理, 比如 排序,聚合,过滤等操作操作详情数据元素便是原始集合,如List、Set、Map等生成流,可以是串行流stream() 或者并行流 parallelStream()中间原创 2020-07-28 16:50:09 · 148 阅读 · 0 评论 -
4-6 Java新特性玩转JDK8之方法与构造函数引用
4-6 Java新特性玩转JDK8之方法与构造函数引用如果您还没有阅读本章须知,请先阅读➡ 本章须知视频课程代码:User用户类public class User { private String name; private int age; public User() { } public User(String name, int age) { this.name = name; this.age = age;转载 2020-07-25 10:01:47 · 99 阅读 · 0 评论 -
4-5 Java新特性玩转JDK8之函数式编程 Predicate
4-5 Java新特性玩转JDK8之函数式编程 Predicate如果您还没有阅读本章须知,请先阅读➡ 本章须知资料Predicate: 断言型接口:有入参,有返回值,返回值类型确定是boolean@FunctionalInterfacepublic interface Predicate<T> { boolean test(T t);}用途接收一个参数,用于判断是否满足一定的条件,过滤数据。使用示例过滤List集合中,以a开头的字符串。public转载 2020-07-25 10:00:42 · 124 阅读 · 0 评论 -
4-4 Java新特性玩转JDK8之函数式编程 Supplier
4-4 Java新特性玩转JDK8之函数式编程 Supplier如果您还没有阅读本章须知,请先阅读➡ 本章须知资料Supplier: 供给型接口:无参数,有返回值该类比较少用@FunctionalInterfacepublic interface Supplier<T> { T get();}用途对于使用一个不能确定对象(可能会有变化的对象),进行包装,从而进行解耦和。泛型一定和方法的返回值类型是一种类型,如果需要获得一个数据,并且不需要传入参数,可以使用转载 2020-07-25 09:59:12 · 131 阅读 · 0 评论 -
4-3 Java新特性玩转JDK8 函数式编程 Consumer
4-3 Java新特性玩转JDK8 函数式编程 Consumer如果您还没有阅读本章须知,请先阅读➡ 本章须知资料Consumer 消费型接口:有入参,无返回值@FunctionalInterface 接口用处是告诉其他团队成员该接口是一个函数式接口,有且只能有一个需实现的方法@FunctionalInterfacepublic interface Consumer<T> { void accept(T t);}用途因为没有出参,常用于打印、发送短信等消费动作。转载 2020-07-25 09:57:23 · 129 阅读 · 0 评论 -
4-2 Java新特性玩转JDK8 函数式编程BiFunction
4-2 Java新特性玩转JDK8 函数式编程BiFunction如果您还没有阅读本章须知,请先阅读➡ 本章须知资料BiFunction 为函数型接口,有两个参数,有返回值。对比Function 多了一个可传入的参数。@FunctionalInterface 接口用处是告诉其他团队成员该接口是一个函数式接口,有且只能有一个需实现的方法@FunctionalInterfacepublic interface BiFunction<T, U, R> { R apply(T转载 2020-07-25 09:56:18 · 371 阅读 · 0 评论 -
4-1 Java新特性玩转JDK8 函数式编程Function
4-1 Java新特性玩转JDK8 函数式编程Function如果您还没有阅读本章须知,请先阅读➡ 本章须知资料Function 为函数型接口,有参数,有返回值。@FunctionalInterface 接口用处是告诉其他团队成员该接口是一个函数式接口,有且只能有一个需实现的方法//@param <T> 是方法传入参数//@param <R> 是方法返回类型@FunctionalInterfacepublic interface Function<T,转载 2020-07-25 09:55:04 · 132 阅读 · 0 评论 -
4-0 学习JDK8 函数式编程前言
4-0 学习JDK8 函数式编程前言使用Lambda表达式必须先定义接口吗?Lambda表达式先定义接口,创建相关方法之后使用,这样做十分不便。其实java8已经内置了许多接口, 例如下面四个功能型接口,所以一般很少会由用户去定义新的函数式接口**Java8的最大特性就是函数式接口,所有标注了@FunctionalInterface注解的接口都是函数式接口Java8内置的四大函数接口。Consumer<T> : 消费型接口:有入参,无返回值 void accept(T t);--转载 2020-07-25 09:52:33 · 101 阅读 · 0 评论 -
3-2 JDK8 之自定义函数式编程实战
3-2 JDK8 之自定义函数式编程实战Lambda 表达式在实际开发中应该如何使用呢?接下来将使用自定义函数式接口与Lambda表达式来实现一个简易的加、减、乘、除。并借此展示Lambda表达式在实际开发中的应用。1)、定义加、减、乘、除函数式接口@FunctionalInterface 接口用处是告诉其他团队成员该接口是一个函数式接口,有且只能有一个需实现的方法@FunctionalInterfacepublic interface OperFunction<R,T> {原创 2020-07-24 16:10:25 · 227 阅读 · 0 评论 -
3-1 JDK8 Lambda表达式
3-1 JDK8 Lambda表达式什么是 Lambda 表达式?在JDK8之前,Java是不支持函数式编程的,所谓的函数编程,即可理解是将一个函数(也称为“行为”)作为一个参数进行传递,面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象(将行为作为一个参数进行传递)与传统方式的对比1)、新建线程传统方式:public class Main { public static void main(String[] args) { new Thre原创 2020-07-24 16:09:08 · 61 阅读 · 0 评论 -
2-5 JDK8之Optional类
2-5 JDK8之Optional类本小节内容将包含一定的Lambda表达式可先跳过观看第三章产生背景:空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。注意:Optional是为了避免传统空指针异常,而并非是返回null一、三种构造方式1)、返回一个值为空的Optional对象public class Main {原创 2020-07-23 11:35:18 · 149 阅读 · 0 评论 -
2-3 2-4 JDK8时间日期处理类处理
2-3 2-4 JDK8时间日期处理类处理一、背景解析在JDK8之前处理时间使用 SimpleDataFormat、Calender 、Data等类 ,来做时间上的处理。线程安全: Date不是线程安全的,你需要编写额外的代码处理线程安全问题API设计和易用性: 由于Date和Calendar的设计不当你无法完成日常的日期操作在JDK8中将会采用java.time包下的所有类来代替传统方式。以下是常用类示意图二、各类分别讲解其中用来获取时间的LocalTime、LocalDa原创 2020-07-23 11:33:32 · 109 阅读 · 0 评论 -
2-2 JDK8之新增Base64加解密方式
2-2 JDK8之新增Base64加解密方式前言传统Base64 加密解密在性能方面损耗比较大,从而大程度上限制着其作用范围。JDK8新推出的Base64加解密方式对于传统方式在性能上做出了优化。是什么?Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法基于64个字符A-Z,a-z,0-9,+,/的编码方式,是一种能将任意二进制数据用64种字元组合原创 2020-07-23 11:24:50 · 163 阅读 · 0 评论 -
2-1 JDK8新特性之default 关键字
2-1 JDK8新特性之default 关键字是什么?jdk8之前,接口里面只能有抽象方法,不能有任何方法实现的。jdk8里面打破了这个规定,引入了新的关键字default,使用default修饰方法,可以在接口里面定义具体的方法实现。接口里面可以定义两种方法实现。默认方法和静态方法。也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制,从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。有什么用?往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这原创 2020-07-23 11:07:20 · 164 阅读 · 0 评论