optional

Java8 Stream新特性详解及实战

烂漫一生 提交于 2020-05-08 10:20:37
Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了。为此,针对Java8的新特性,会更新一系列的文章,欢迎大家持续关注。 首先,我们来看一下Spring Boot源代码ConfigFileApplicationListener类中的一段代码: private List<Profile> getOtherActiveProfiles(Set<Profile> activatedViaProperty) { return Arrays.stream(this.environment.getActiveProfiles()).map(Profile::new) .filter((profile) -> !activatedViaProperty.contains(profile)) .collect(Collectors.toList()); } 这段代码怎么?够简洁明快吧,如果不使用Java8的新特性,想象一下得多少行代码才能实现?但如果没掌握或不了解Java8的新特性,这段代码读起来是不是很酸爽? Java 8的API中新增了一个处理集合的抽象概念:Stream,中文称作“流”。它可以指定你希望对集合进行的操作,可以执行非常复杂的查找

JAVA8十大新特性详解

两盒软妹~` 提交于 2020-05-08 10:09:10
一、接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: interface Formula { double calculate( int a); default double sqrt( int a) { return Math.sqrt(a); } } Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。 Formula formula = new Formula() { @Override public double calculate( int a) { return sqrt(a * 100 ); } }; formula.calculate( 100); // 100.0 formula.sqrt(16); // 4.0 文中的formula被实现为一个匿名类的实例,该代码非常容易理解,6行代码实现了计算 sqrt(a * 100)。在下一节中,我们将会看到实现单方法接口的更简单的做法。 译者注: 在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承,允许一个子类同时具有多个父类的接口与功能,在其他语言中

Maven 学习总结 (一)

落花浮王杯 提交于 2020-05-08 09:26:13
一、何为Maven    1、Maven是优秀的构建工具    maven的用途之一是用于构建,他是一个强大的构建工具,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。 他抽象了一个完整的构建生命周期模型,帮助我们标准化构建过程。 Maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现;他跨平台,对外提供一致的操作接口, 这一切足以使它成为优秀的、流行的构建工具。 2、依赖管理工具和项目信息管理工具    Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。他提供了中央仓库,能帮我们自动下载构建。 他提供了一个优秀的解决方案,通过一个坐标系统准确地定位每一个构建(artifact),也就是通过一组坐标maven能够找到任何一类java类库。 我们可以借助它来有序地管理依赖,轻松解决那些复杂的依赖问题。 二、安装配置 1、具体安装步骤(略)   2、maven用户可以选择配置M2_HOME/conf/settings.xml或者~/.m2/settings.xml.    M2_HOME/conf/settings.xml 是全局范围的,整台机器上所有用户都会直接受到该配置的影响,    ~/.m2/settings.xml. 是用户范围的,只有当前用户才会受到该配置的影响。 三、依赖管理    1、坐标和依赖

还在用迭代器处理集合吗?试试Stream,真香

吃可爱长大的小学妹 提交于 2020-05-08 08:14:34
前言 上一篇博客 一文带你深入了解 Lambda 表达式和方法引用 我给大家介绍了 Java8 函数式特性中的 Lambda,这篇文章我将继续讨论 stream 流的用法 声明:本文首发于博客园,作者:后青春期的Keats;地址: https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! Show Time 首先给大家看一段代码,让大家直观感受下 Java7 和 Java8 遍历处理集合的不同 Dish 是一个菜肴对象,calories 属性表示该菜品的卡路里值,name 则是菜品的名称。我们需要过滤出卡路里小于400、然后根据卡路里值升序、接着拿到他们的名称列表并返回 Java7 public static List<String> getLowCaloricDishesNamesInJava7(List<Dish> dishes){ List<Dish> lowCaloricDishes = new ArrayList<>(); for(Dish d: dishes){ if(d.getCalories() < 400){ lowCaloricDishes.add(d); } } List<String> lowCaloricDishesName = new ArrayList<>(); Collections.sort

JSON:JavaScript 对象表示法

不羁的心 提交于 2020-05-08 06:18:10
JSON:JavaScript 对象表示法( Java Script Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 /* * JSON * - JS中的对象只有JS自己认识,其他的语言都不认识 * - JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别, * 并且可以转换为任意语言中的对象,JSON在开发中主要用来数据的交互 * - JSON * - JavaScript Object Notation JS对象表示法 * - JSON和JS对象的格式一样,只不过JSON字符串中的属性名必须加双引号 * 其他的和JS语法一致 * JSON分类: * 1.对象 {} * 2.数组 [] * * JSON中允许的值: * 1.字符串 * 2.数值 * 3.布尔值 * 4.null * 5.对象 * 6.数组 //创建一个对象 var arr = '[1,2,3,"hello",true]'; var obj2 = '{"arr":[1,2,3]}'; var arr2 ='[{"name":"孙悟空","age":18,"gender":"男"},{"name":"孙悟空","age":18,"gender":"男"}]'; /* * 将JSON字符串转换为JS中的对象 *

maya里的substance节点使用

被刻印的时光 ゝ 提交于 2020-05-08 04:07:08
碎碎念: 最近本来在研究SubstancePainter。突然发现maya里有多出来Substance程序纹理插件。查了一下,居然在maya2012就添加进来了,只不过需要在插件管理器里加载,所以一直都没注意到。(哎呀,我快被知识抛弃了,55555要快速召回它啦。) 现在maya附带的版本1.2.2.0已经过时,官方支持的版本是1.3.0.0 。使用Substance插件可以直接在Maya中加载在Substance Designer中创建的Substance材质(*.sbsar)。该插件将创建一个Maya材质,并将substance纹理输入到材质通道输入中。可以更改substance参数,纹理将自动更新。 试用下来觉得还是挺不错的,如果有材质库,真是分分钟出效果啊。只不过支持的最高分辨率为2048*2048,但程序纹理嘛,可以提高重复值啊,先用用再说咯。官方正在写2.0版本,可以期待一下新的内容。 Substance官方帮助文档: https://support.allegorithmic.com/documentation/integrations/maya-149291349.html 基础设置方法: 打开Hypershade材质编辑器,并创建 Substance节点。 选择Substance节点,然后设置Workflow工作流程。 加载Substance文件*.sbsar

Java-API-Package:java.sql百科

[亡魂溺海] 提交于 2020-05-07 18:38:33
ylbtech-Java-API-Package:java.sql百科 提供使用 JavaTM 编程语言 访问并处理存储在 数据源 (通常是一个关系数据库)中的数据的 API。 此 API 包括一个 框架 ,凭借此框架可以 动态地安装不同驱动程序来访问不同数据源 。 1、 中文名:java.sql 用 于:将 SQL 语句传递给数据库 性 质:API 分 类:SQL 类型 目录 1 描述 2 sql包内容 3 JDBC内容 ▪ TM3.0API ▪ TM4.0API 4 JDBC特性 ▪ 4.0特性 ▪ 3.0特性 ▪ 2.1特性 5 用途 6 JDBCAPI ▪ JDBC ▪ 优缺点 ▪ 支持 7 一致性 2、 1. 返回顶部 1、 描述 JDBC TM API 主要用于 将 SQL 语句传递给数据库 ,但它还可以用于 以表格方式从任何数据源中读写数据 。通过接口的 javax.sql.RowSet 组 可以使用的 reader/writer 实用程序 ,可以被定制以 使用和更新 来自 电子表格 、 纯文本文件 或其他任何表格式数据源 的数据。 sql包内容 java.sql 包中包含用于以下方面的 API: 通过 DriverManager 实用程序建立与数据库的连接 DriverManager 类:建立与驱动程序的连接 SQLPermission 类:代码在 Security

Java Spring Boot VS .NetCore (七) 配置文件

半世苍凉 提交于 2020-05-07 02:01:48
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Java Spring Boot VS .NetCore (三)Ioc容器处理 Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore Java Spring Boot VS .NetCore (五)MyBatis vs EFCore Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml Java Spring Boot VS .NetCore (七) 配置文件 Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag

【Java】java扩展机制SPI 实现

房东的猫 提交于 2020-05-06 23:03:38
一、SPI是什么   SPI机制(Service Provider Interface),是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。引入服务提供者就是引入了spi接口的实现者,通过本地的注册发现获取到具体的实现类,轻松可插拔。   场景:比较典型的一个场景就是JDBC中加载驱动的过程。 二、使用demo demo工程结构: 1)首先我们定义一个提供接口的三方包SpiInterface public interface SpiInterface { public void method(); } 2)然后我们分别定义两个实现SpiInterface接口的三方实现SpiIml01、SpiIml02; 1、SpiIml01 public class SpiIml01 implements SpiInterface { public void method() { System.out.println( "print SpiIml01" ); } } pom:引入三方接口包SpiInterface <dependencies> <dependency> <groupId>com.robin</groupId> <artifactId>SpiInterface</artifactId> <version>1.0-SNAPSHOT</version>

全面理解Python中的类型提示(Type Hints)

笑着哭i 提交于 2020-05-06 10:53:02
众所周知,Python 是动态类型语言,运行时不需要指定变量类型。这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发者指定变量类型。它的主要作用是方便开发,供IDE 和各种开发工具使用,对代码运行不产生影响,运行时会过滤类型信息。 Python的主要卖点之一就是它是动态类型的,这一点也不会改变。而在2014年9月, Guido van Rossum (Python BDFL ) 创建了一个Python增强提议( PEP-484 ),为Python添加类型提示(Type Hints)。并在一年后,于2015年9月作为Python3.5.0的一部分发布了。于是对于 存在了二十五年 的Python,有了一种标准方法向代码中添加类型信息。在这篇博文中,我将探讨这个系统是如何成熟的,我们如何使用它以及类型提示的下一步是什么。 为什么需要类型提示? 类型提示的优点 首先,让我们看看为什么需要Python中的类型提示(Type Hints)。类型提示有很多优点,我将尝试按重要性顺序来列举这些优点: 易于理解代码 了解参数的类型,可以使得理解和维护代码库变得更加容易。 例如,现在有一个函数。虽然我们在创建函数时知道了参数类型,但几个月之后就不再是这种情况了。 在代码旁边陈述了所有参数的类型和返回类型