superT

关于Java8的精心总结

僤鯓⒐⒋嵵緔 提交于 2020-08-05 04:48:22
前言 ​ 最近公司里比较新的项目里面,看到了很多关于java8新特性的用法,由于之前自己对java8的新特性不是很了解也没有去做深入研究,所以最近就系统的去学习了一下,然后总结了一篇文章第一时间和大家分享一下。 ​ ​ 在了解一项新技术之前,我们需要了解我们为什么要去学习它以及它的优点,以下是我总结的: Java8(又称jdk1.8)是java语言开发的一个主要版本,Java8是oracal公司于2014年3月发布,可以看成是自java5以来最具有革命性的版本。 新特性的优点: 速度更快、代码更少、便于并行、最大化减少空指针异常 函数式编程提供了一种更高层次的抽象化 排序: List<RoleEntity> rolesListSort = rolesList.stream().sorted(Comparator.comparing(RoleEntity::getCreateDate)).collect(Collectors.toList()); Consumer是一个函数式接口 参数是Consumer类型的,Consumer里面的泛型表示泛型的类型要么是Integer,要么是Integer的父类,super表示它及它上面的,也就是父类。 下面这段代码是在Iterable接口里面的默认方法,jdk8之后的新方法,默认方法(默认方法的引入很大程度上是为了保证向后兼容) default

Disruptor之ExceptionHandler

醉酒当歌 提交于 2020-07-29 09:42:13
Disruptor的版本3.4.2. List-1 public interface ExceptionHandler<T> { /** * <p>Strategy for handling uncaught exceptions when processing an event.</p> * * <p>If the strategy wishes to terminate further processing by the {@link BatchEventProcessor} * then it should throw a {@link RuntimeException}.</p> * * @param ex the exception that propagated from the {@link EventHandler}. * @param sequence of the event which cause the exception. * @param event being processed when the exception occurred. This can be null. */ void handleEventException(Throwable ex, long sequence, T event); /** * Callback to

看完吊打面试官:Stream API有哪些中间操作?

試著忘記壹切 提交于 2020-07-27 05:26:17
Stream的中间操作 多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值” 。 Stream的中间操作是不会有任何结果数据输出的。 Stream的中间操作在整体上可以分为:筛选与切片、映射、排序。接下来,我们就分别对这些中间操作进行简要的说明。 筛选与切片 这里,我将与筛选和切片有关的操作整理成如下表格。 接下来,我们列举几个简单的示例,以便加深理解。 为了更好的测试程序,我先构造了一个对象数组,如下所示: protected List<Employee> list = Arrays.asList( new Employee("张三", 18, 9999.99), new Employee("李四", 38, 5555.55), new Employee("王五", 60, 6666.66), new Employee("赵六", 8, 7777.77), new Employee("田七", 58, 3333.33) ); 其中,Employee类的定义如下所示。 @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor public class Employee implements Serializable {

Java Stream & Method Reference

冷暖自知 提交于 2020-05-08 09:21:57
[TOC] 传统集合的多步遍历代码 /* 传统的方式遍历集合,过滤集合,打印输出满足条件的集合 */ import java.util.ArrayList; public class Demo01LIst { public static void main(String[] args) { // 创建list集合,存储姓名 ArrayList<String> list = new ArrayList<>(); list.add("张无忌"); list.add("赵敏"); list.add("周芷若"); list.add("张强"); list.add("张三丰"); ArrayList<String> listA = new ArrayList<>(); for (String s : list) { // 对list集合过滤,将张字开头的添加到listA集合中 if (s.startsWith("张")) { listA.add(s); } } ArrayList<String> listB = new ArrayList<>(); for (String s : listA) { // 对listA集合过滤,只要名字长度为3的 if (s.length() == 3) { listB.add(s); } } // 遍历listB集合,打印输出 for (String s

JAVA基础部分复习(三、泛型)

大兔子大兔子 提交于 2020-05-08 00:50:46
JAVA泛型的基本使用: /** * JAVA泛型的使用 * 定义:泛型的本质是参数化类型,就是说所操作的数据类型被指定为一个参数。 * * 定义泛型方法的规则 * 1.所有泛型方法声明都有一个类型参数声明部分(由尖括号分割),该类型参数声明部分在方法返回类型之前。 * 2.类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。 * 3.泛型方法的声明和普通方法一样,需要注意的是类型参数只能代表引用类型,不能是原始类型(像int,char,double,folat等) * 4.每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。 * * 类型擦除的说明:泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。 * * 类型通配符上限和类型通配符下限 * <? extends T>表示该通配符所代表的类型是T类型的子类。 * <? super T>表示该通配符所代表的类型是T类型的父类。 * * 总结: * 我们发现,在使用泛型类时,虽然传入了不同的泛型实参,但并没有真正意义上生成不同的类型,传入不同泛型实参的泛型类在内存上只有一个, * 即还是原来的最基本的类型(本实例中为Box),当然,在逻辑上我们可以理解成多个不同的泛型类型

[置顶]

JAVA泛型机制

情到浓时终转凉″ 提交于 2020-05-07 18:45:01
基本理论转自::http://blog.csdn.net/sunxianghuang/article/details/51982979 泛型数组的实现转自::http://blog.csdn.net/yi_Afly/article/details/52058708 请原谅我把大佬们的博客copy到一起,如有版权问题,发邮件到2735613123@qq.com 泛型之前 在面向对象编程语言中,多态算是一种泛化机制。例如,你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性。 此外,如果将方法参数声明为接口,将会更加灵活。 在Java增加泛型类型之前,通用程序的设计就是利用 继承 实现的,例如,ArrayList类只维护一个Object引用的数组,Object为所有类 基类 。 [java] view plain copy public class BeforeGeneric { static class ArrayList{ //泛型之前的通用程序设计 private Object[] elements= new Object[ 0 ]; public Object get( int i){ return elements[i]; } public void add(Object o){ //这里的实现,只是为了演示

一文读懂java中的Reference和引用类型

。_饼干妹妹 提交于 2020-05-04 07:31:47
一文读懂java中的Reference和引用类型 简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型。java为引用类型专门定义了一个类叫做Reference。Reference是跟java垃圾回收机制息息相关的类,通过探讨Reference的实现可以更加深入的理解java的垃圾回收是怎么工作的。 本文先从java中的四种引用类型开始,一步一步揭开Reference的面纱。 java中的四种引用类型分别是:强引用,软引用,弱引用和虚引用。 强引用Strong Reference java中的引用默认就是强引用,任何一个对象的赋值操作就产生了对这个对象的强引用。 我们看一个例子: public class StrongReferenceUsage { [@Test](https://my.oschina.net/azibug) public void stringReference(){ Object obj = new Object(); } } 上面我们new了一个Object对象,并将其赋值给obj,这个obj就是new Object()的强引用。 强引用的特性是只要有强引用存在,被引用的对象就不会被垃圾回收。 软引用Soft Reference 软引用在java中有个专门的SoftReference类型

深入理解什么是Java泛型?泛型怎么使用?【纯转】

廉价感情. 提交于 2020-05-04 00:22:39
本篇文章给大家带来的内容是介绍深入理解什么是Java泛型?泛型怎么使用?有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。 一、什么是泛型 “泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型的提出是为了编写重用性更好的代码。泛型的本质是 参数化类型 ,也就是说所操作的 数据类型 被指定为一个 参数 。 比如常见的集合类 LinkedList: 1 2 3 4 5 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>,Deque<E>,Cloneable,Serializable{ //..... transient Link<E> voidLink; //..... } 可以看到,LinkedList<E> 类名及其实现的接口名后有个特殊的部分<E>,而且它的成员的类型 Link<E> 也包含一个<E>,这个符号的就是类型参数,它使得在运行中,创建一个 LinkedList 时可以传入不同的类型。 二、 为什么引入泛型 在引入泛型之前,要想实现一个通用的、可以处理不同类型的方法,你需要使用 Object 作为属性和方法参数,比如这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class

Java中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

梦想的初衷 提交于 2020-05-02 10:05:42
简介 : 本文主要介绍JAVA中的四种引用: StrongReference(强引用)、SoftReferenc(软引用)、WeakReferenc(弱引用)、PhantomReference(虚引用)的作用。同时我们还将介绍ReferenceQueue和WeakHashMap的功能和使用示例。 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. JAVA中的四种引用 四种引用中,软引用、若引用、虚引用都需要相关类来创建。创建的时候都需要传递一个对象,然后通过引用的get方法获取真正的对象。 1.1 StrongReference( 强引用) 强引用就是我们一般在程序中引用一个对象的方式 Object obj = new Object(); obj就是一个强引用。垃圾回收器绝不会回收它,当内存空间不足, Java 虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠回收具有强引用的对象来解决内存不足的问题。 1.2 SoftReference( 软引用) 软引用的创建要借助于java.lang.ref包下的SoftReferenc类。当JVM进行垃圾回收时, 只有在内存不足的时候JVM才会回收仅有软引用指向的对象所占的空间 。 package javalearning; import java

java8新特性之Optional类

时光总嘲笑我的痴心妄想 提交于 2020-05-01 03:47:58
NullPointException可以说是所有java 程序员 都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java语言中变得更加简单、易用,而不能完全的将其剔除,所以才有了我们日常所见到的关键字 null 。 空指针异常是一个运行时异常,对于这一类异常,如果没有明确的处理策略,那么最佳实践在于让程序早点挂掉,但是很多场景下,不是开发人员没有具体的处理策略,而是根本没有意识到空指针异常的存在。当异常真的发生的时候,处理策略也很简单,在存在异常的地方添加一个if语句判定即可,但是这样的应对策略会让我们的程序出现越来越多的null判定,我们知道一个良好的程序设计,应该让代码中尽量少出现null关键字,而java8所提供的 Optional 类则在减少NullPointException的同时,也提升了代码的美观度。但首先我们需要明确的是,它并 不是对 null 关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,从而避免NullPointException 。 一. 直观感受 假设我们需要返回一个字符串的长度,如果不借助第三方工具类,我们需要调用 str.length() 方法: if(null == str) { // 空指针判定 return 0; } return str