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())
.filter(i -> i.getID() == item.getTravelMoneyID()).findFirst()

常见操作

去除重复: .distince()

排序.sorted(), 反向.reversed()

List<TravelTicketCommonDTO> targetList = orderedAvailableTTInfoList.stream()
.filter(i -> i.getTicketCategoryID().equals(item.getTicketCategoryID())
&& i.getCanRefundAmount().compareTo(BigDecimal.ZERO) > 0)
.sorted(Comparator.comparing(TravelTicketCommonDTO::getExpirationDate).reversed())
.collect(Collectors.toList());

聚合方法 .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("\\.");//大坑

参考资料

  1. Cay, S, Horstmann. 写给大忙人看的JavaSE8[M]. 北京:电子工业出版社, 2015.

转载于:https://www.cnblogs.com/xiong2ge/p/jdk8_fast.html

JDK1.8快速入门相关推荐

  1. springcloud项目打包_SpringCloud 快速入门

    前言 最近入职了新公司,主要负责Java后端开发工作.目前正在开展一个全新的业务,技术选型为SpringCloud全家桶,项目的骨架由我负责搭建.由于前几家公司的微服务框架都是使用Dubbo + Sp ...

  2. solr6 java_Solr6 快速入门教程

    Solr6 快速入门教程 安装 环境要求 JDK1.8 下载Solr,本文试验时,使用的Solr6.6.0 开始安装 解压solr-6.6.0.zip cd solr-6.6.0\ 启动solr,ru ...

  3. JDBC之一:快速入门

    JDBC之一:快速入门 @(JAVA)[java] (1)下载Oracle的JDBC驱动,一般放在$ORACLE_HOME/jdbc/lib目录,关于驱动的版本请见: http://elf8848.i ...

  4. BeanShell快速入门---Java应用

    来源:https://www.iteye.com/blog/jiasudu-105761 快速入门 欢迎使用BeanShell.这是一个速成课程.我们将省去一些重要的选项和细节.要学习更多的内容请看本 ...

  5. RocketMQ带你快速入门

    1. MQ介绍 ##1.1 为什么要用MQ 消息队列是一种"先进先出"的数据结构 转存失败重新上传取消 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高,容错性就越低.以 ...

  6. Spring Boot JWT 快速入门

    本章节讨论 jwt 在 spring boot 中的应用.意在快速入门 jwt. java jdk1.8 maven 3.2+ spring boot 2.0+ JSON Web Token(JWT) ...

  7. 入门指南_Spring Boot2: 快速入门指南

    Spring Boot2: 快速入门指南 简述 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻 这也是为什么Spring Boot被推上主流的原因,现在 ...

  8. Alibaba Arthas快速入门 简单易懂

    简介 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执 ...

  9. 图数据库HugeGraph简介与快速入门

    图数据库HugeGraph简介与快速入门 作者:胡佳辉(家辉),日期:2019年2月10日 CSDN博客:https://blog.csdn.net/gobitan 1. HugeGraph简介 1. ...

最新文章

  1. mysql-外键-随堂
  2. Pytorch 编译cpp、cuda扩展遇到的问题
  3. iis7.5站点为共享文件的设置
  4. ffmpeg php 使用教程_php的ffmpeg - CSDN博客
  5. 【直男福音】7款破解版APP,助你早日脱单
  6. 豆瓣top250html源码,用23行代码爬取豆瓣音乐top250
  7. python下载网站视频_【python爬虫实战】批量下载网站视频
  8. 2018计算机专硕学硕,2018年考研要弄清学硕与专硕的区别
  9. Python中可视化工具包Matplotlib和Visdom介绍
  10. 智慧充电桩开发让充电变得更加安全
  11. 安卓:Kotlin数据库框架GreenDao的使用
  12. 库卡机器人profinet连接说明(西门子PLC部分)
  13. 低频相位计的校准方法
  14. 三星530换固态硬盘_三星迷你固态硬盘Portable SSD T7 Touch试用 支持指纹识别设备...
  15. 37了解高可用技术方案,如冗余、容灾
  16. 【转】Jira插件安装
  17. Centos7 FastDFS 搭建
  18. 用C语言实现:如果一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  19. chrome的手机端调试
  20. 医疗云计算有料!大数据如何给中国医学史加一副药

热门文章

  1. SAP PM入门系列33 - IP16 维修计划报表
  2. SAP PM 入门系列12 - IW32 下达一个维护订单
  3. 微软和谷歌分别开源分布式深度学习框架,各自厉害在哪?
  4. 让AI计算无处不在,华为干了一件大事
  5. 2019 年,10篇新颖到出格的 AI 论文
  6. 深度资讯 | 新报告:6万亿美元的人工智能市场,哪些领域更有前途?
  7. ESI最新计算机学科统计:中国78所跻身高被引100强,中南大学夺冠
  8. SAP Ariba——全球最大的采购服务平台
  9. 人工智能:看看BAT三巨头怎么说
  10. 地平线将融资10亿美元,或创AI芯片融资纪录