JDK1.8快速入门
JDK8提供了非常多的便捷用法和语法糖,其编码效率几乎接近于C#开发,maven则是java目前为止最赞的jar包管理和build工具,这两部分内容都不算多,就合并到一起了。
愿编写java代码的过程如:Fast & Furious
鸟枪换炮咯,走起!J Java 7发布于2011年,Java 8发布于2014年,Java 9还远么?
在javase8中,lambda表达式的形式基本好C#中一致,Stream和LINQ类似,Future<T>和Task<T>类似,可以这样说,javase8大体达到了C#编码的便捷程度哈!帅帅哒
- Lambda(和.NET一样)
功能 |
示例 |
函数式接口 |
Arrays.sort(words, (first, second) -> Integer.compare(first.length(), second.length())); BiFunction<String, String, Integer> comp = (first, second) -> Integer.compare(first.length(), second.length()); 常见的函数式接口(推荐使用),和C#Action<T>,Function<T, R>类似 Runnable,Supplier<T>,Consumer<T>, Function<T, R>, Predicate<T> |
方法引用 |
Arrays.sort(words, String::compareToIgnoreCase); |
构造器引用 |
list.stream().collect(Collectors.toList()); |
默认方法,接口中的静态方法 |
不太推荐 |
概念 |
所有的lambda表达式都符合闭包,且是延迟执行的 |
- Stream
功能 |
示例 |
创建Stream |
Stream<String> song = Stream.of("Shanghai", "Beijing"); |
filter,map,flatmap方法 |
分别对应C#中Linq的where,select和selectMany Optional<TravelTicket> tempTT = availableTicketMapper.values().stream().flatMap(i -> i.stream()) |
常见操作 |
去除重复: .distince() 排序.sorted(), 反向.reversed() List<TravelTicketCommonDTO> targetList = orderedAvailableTTInfoList.stream() 聚合方法 .max(), findFirst(), .findAny(), .anyMatch() 聚合操作 .reduce((x,y)->x+y),reduce(BigDecimal.ZERO, BigDecimal::add) 分组和分片: .groupingBy(), mapping(), joining() 并行流: .parallel() |
Optional类型 |
Optional<T>是对T类型封装,它不会返回null,使得引用更安全 |
- 时间日期
在1.8以前,主要使用joda-time库来处理一些比较复杂的时间日期操作,现在有官方的api了。
http://www.cnblogs.com/565261641-fzh/p/5683594.html
功能 |
示例 |
时间线Instant |
Instant start = Instant.now(); Thread.sleep(1000); Instant end = Instant.now(); Duration timeElapsed = Duration.between(start, end); long millis = timeElapsed.toMillis(); |
本地日期LocalDate |
LocalDate today = LocalDate.now(); LocalDate oneDay = LocalDate.of(2017, 7, 9); LocalDate addDay = LocalDate.now().plusDays(10); |
日期校正器TemporalAdjueters |
获取2017年5月的第一个周二 LocalDate time = LocalDate.of(2017, 5, 1) .with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY)); |
本地时间LocalTime |
LocalTime time = LocalTime.of(16, 37, 11); |
带时区的时间ZonedDateTime |
ZonedDateTime applloTime = ZonedDateTime.of(2017, 5, 9, 16, 40, 11, 0, ZoneId.of("America/New_York")); |
格式化和解析DateTimeFormatter |
用于替代过去的DateFormat,SimpleDateFormat |
遗留代码的互操作 |
Instant start = Instant.now();其他类型的操作类似 Date oldDate = Date.from(start); |
- 并发
功能 |
示例 |
原子值 |
AtomicLong nextNumber = new AtomicLong(); nextNumber.incrementAndGet(); |
ConcurrentHashMap的改进 |
ConcurrentMap<String, Integer> map = new ConcurrentHashMap(); map.putIfAbsent("age", 100); map.compute("name", (k, v) -> v == null ? 1 : v + 1); map.merge("age", 1, (oldValue, newValue) -> oldValue + newValue); 批量数据操作:reduceValue, reduceKeys |
并行数组操作 |
String[] people = new String[]{"xionger", "shuaishuaida"}; Arrays.parallelSort(people); |
Future,和.NET的Task<T>类似 |
CompletableFuture<String> contents = CompletableFuture.supplyAsync(() -> getAsync()); 这部分知识之后再加强 |
- 杂项
功能 |
示例 |
字符串 |
String joined = String.join("/", "user", "local", "bin"); |
数字扩展 |
Long testValue = Integer.toUnsignedLong(Integer.MAX_VALUE); |
新的数值函数 |
int result = Math.floorMod(Math.toIntExact(100L), 3); |
新增集合方法 |
list.forEach((item) -> System.out.println(item)); Map: remove, putIfAbsent, computeIf, merge 排序:Arrays.sort(people, Comparator.comparing(Person::getAge)); |
使用文件 |
这儿看到try-with-resource,等价于using,java代码也可以和.net一样简介 try (Stream<String> lines = Files.lines(path)) { Optional<String> pwd = lines.filter(s -> s.contains("pwd")).findFirst();} |
Base64编码 |
Base64.Encoder encoder = Base64.getMimeEncoder(); try (OutputStream output = Files.newOutputStream(encoderPath)) { Files.copy(originalPath, encoder.wrap(output));} |
注解 |
通过在注解上添加@Repeatable,使得注解可多次使用 可以使用基于类型的注解 private @NonNull List<String> names = new ArrayList<>(); 方法参数反射,可以反射获取参数的名称 |
Java7 |
使用Path接口来代替File类 Path absolute = Paths.get("/", "home", "shanghai "); Files.write(absolute, content.getBytes(StandardCharsets.UTF_8)); |
Tip: demo项目
Java Decimal运算需要注意:
1、 ROUND_UP:向上取整(丢掉小数,整数加1) 远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
2、ROUND_DOWN:向下取整(丢掉小数)。趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
3、ROUND_CEILING:向正无穷方向走,始终不会减少计算值。如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。Math.round()方法就是使用的此模式。
4、ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。
5、 HALF_UP:四舍五入,最近数字舍入(5进)。
6、 HALF_DOWN:四舍六入,最近数字舍入(5舍)。
7、 HAIL_EVEN:银行家舍入法。四舍六入五偶舍。即舍弃位4舍6入,当为5时看前一位,奇进偶舍。向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
也就是说,如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同; 如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。
注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。
8、ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入。如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
String[] tempList = ticketCategoryIDListString.split("\\.");//大坑
参考资料
- Cay, S, Horstmann. 写给大忙人看的JavaSE8[M]. 北京:电子工业出版社, 2015.
JDK1.8快速入门的更多相关文章
- Java Web快速入门——全十讲
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...
- Maven3 快速入门
Maven3 快速入门 Maven 是目前大型项目构建的必备知识.本章会通过介绍 Maven 的作用,Maven 的基本语法,以及搭建企业级项目架构来快速入门 Maven .前两部分是理论知识只需要了 ...
- (1)Maven快速入门_1maven安装
Maven 快速入门 1.1 Maven官网下载 windows 系统 下载 下图红色框选处. 下载到本地解压, 创建一个本地maven仓库的目录 maven_lib 配置Maven的环境变量 ...
- 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)
第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...
- Java 快速入门-06-JDK 目录文件说明
Java 快速入门-06-JDK 目录文件说明 JDK:开发环境,搞技术的人或者应用服务器使用 JRE:运行环境,如浏览器插件或者Swing界面的客户端等最终用户需要使用 JDK自含一个JRE,并依赖 ...
- Java快速入门-03-小知识汇总篇(全)
Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...
- Apache Maven(一):快速入门
Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一 ...
- 零基础快速入门SpringBoot2.0教程 (三)
一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...
- ELK快速入门(一)基本部署
ELK快速入门一-基本部署 ELK简介 什么是ELK?通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同 ...
随机推荐
- asp.net连接数据库超时的解决办法
错误提示:“超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. ” 经过几天辛苦写的代码,终于实现了功能丰富的查询功能,但是使用的过 ...
- svn问题汇总
1 svn图标 2 问题 SVN删除文件 一.本地删除SVN删除文件中的本地删除,指的是在客户端delete了一个文件,但还没有commit,使用revert来撤销删除. 二.服务器删除1.通过本地删 ...
- AngularJS学习笔记3——AngularJS的工作原理
个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...
- Java实现POS打印机自定义无驱打印
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- C++ ------ const迭代器 和 const_iterator的区别
const迭代器,顾名思义,就是不能改变的迭代器,是常量,其性质是由const决定的.比如说我们这样定义一个const迭代器. vector<,); const vector<int> ...
- Kafka 0.8 宕机问题排查步骤
CPU 利用率高的排查方法 看看该机器的连接数是不是比其他机器多,监听的端口数:netstat -anlp | wc -l Kafka-0.8的停止和启动 启动: cd /usr/local/kafk ...
- SpringBoot入门Demo(Hello Word Boot)
Spring Boot 是由Pivotal团队提供的全新框架,其设计目的是用来简化新的Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...
- (64位)本体学习程序(ontoEnrich)系统使用说明文档
系统运行:文件夹system下,可执行文件ontoEnrichment 概念学习 --------------------------------------------------------1.简 ...
- 基于JWT(Json Web Token)的ASP.NET Web API授权方式
token应用流程 初次登录:用户初次登录,输入用户名密码 密码验证:服务器从数据库取出用户名和密码进行验证 生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT 返还JWT ...
- expect 交互 之双引号较长变量
交互双引号较长变量 #!/bin/bash RemoteUser=xuesong12 Ip=192.168.1.2 RemotePasswd=xuesong Cmd="/bin/echo ...