Java-Java8特性(更新中)
Java8新特性
之前零零散散写了很多java8的内容,今天做一个整理,也算是整理用到的内容,当然细化的话还有很多,只是说暂时用不到,为了面试的话已经够了
- 日期计算
- Lambda表达式
- 函数式接口(比较器Comparator接口)
- 方法引用
- Stream流操作
- Optional
- Base64
- 其他(HashMap性能提升,IO/NIO改进)
- 日期计算
之前写过关于下星期一打款的工具类,但是新看到了java8中附带了,比我写的简单多了,记录一下
计算当前时间有关的----某个星期几
public static Date dateNextMonday(String date) {
/*Calendar获取的Week顺序:星期日 星期一 星期二 星期三 星期四 星期五 星期六*/
int[] weekDays = {1, 7, 6, 5, 4, 3, 2};
Calendar calendar = Calendar.getInstance();
int addDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
calendar.add(Calendar.DATE, weekDays[addDay]);//当前时间的下周一
// 将时分秒,毫秒域清零
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
Java8实现:
/*Java8---日期*/
/* LocalDate independenceDay = LocalDate.of(2020, Month.SEPTEMBER, 27);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);*/
LocalDateTime sylvester = LocalDateTime.of(2020, Month.SEPTEMBER, 27, 23, 59, 59);
DayOfWeek dayOfWeek = sylvester.getDayOfWeek();
System.out.println(dayOfWeek);
Month month = sylvester.getMonth();
System.out.println(month);
Lambda表达式
有句话感觉说的很好,Lambda主要就是简洁代码量,
函数式接口
之前笔记:https://www.cnblogs.com/meditation5201314/p/13192254.html
方法引用
就是内部使用静态类,简化代码
//Hero内部中:
public static int compareByName(Hero a, Hero b) {
return a.getName().compareToIgnoreCase(b.getName());
}
/*************************************************************/
Hero[] heros = new Hero[]{
new Hero("ASDF3", 12, 12),
new Hero("ASDF2", 12, 12),
new Hero("ASDF", 12, 12),
new Hero("ASDF", 12, 12)
};
/*从小到大排序*/
//匿名类
Arrays.sort(heros, new Comparator<Hero>() {
@Override
public int compare(Hero o1, Hero o2) {
return o1.getName().compareTo(o2.getName());
}
});
//Lambda表达式
Arrays.sort(heros, (Hero o1, Hero o2) -> {
return o1.getName().compareTo(o2.getName());
});
//方法引用
Arrays.sort(heros, Hero::compareByName);
Arrays.stream(heros).forEach(System.out::println);
Stream流操作
具体可以见学习链接:https://how2j.cn/k/lambda/lambda-lamdba-tutorials/697.html
昨天的异步Stream也包含在这里面:https://www.cnblogs.com/meditation5201314/p/13647538.html
String[] strings = new String[]{"asdf", "fsdfa", "asdff"};
Arrays.stream(strings).filter(s -> s.startsWith("a")).forEach(System.out::println);
Arrays.stream(strings).map(String::toUpperCase).sorted((a, b) -> a.compareTo(b)).forEach(System.out::println);
System.out.println(Arrays.stream(strings).allMatch(s -> s.startsWith("a")));
System.out.println(Arrays.stream(strings).filter(s -> s.startsWith("a")).count());
Optional
Optional<String> reduced = Arrays.stream(strings).sorted().reduce((s1, s2) -> s1 + "$" + s2);
reduced.ifPresent(System.out::println);
Hero hero = new Hero();
Hero newHero = new Hero();
newHero.setName("这是新Hero"); Optional<Hero> heroOptional = Optional.ofNullable(hero);
heroOptional.ifPresent(System.out::println); //不为空就输出
System.out.println(heroOptional.orElse(newHero)); //不为空就原样输出,为空就输出新的
System.out.println(heroOptional.orElseGet(()->functionReturn())); //不为空就原样输出,为空就输出函数返回值
System.out.println("========");
System.out.println(heroOptional.map(hero1 -> hero1.getName()).map(name-> name.toUpperCase()).orElse("asdf")); //循环检查




Base64
public class Base64 {
public static void main(String[] args){
final String text = "Base64 finally in Java 8!";
final String encoded = java.util.Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(encoded);
final String decoded = new String(java.util.Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
System.out.println(decoded);
}
}
其他
HashMap引入红黑树,性能得到优化(之前一直以为都有红黑树,结果是java8引入的)

Io/Nio
遍历当前目录的文件和目录
Files.list(new File(".").toPath()).forEach(System.out::println);
Java-Java8特性(更新中)的更多相关文章
- 韩顺平Java(持续更新中)
原创上课笔记,转载请注明出处 第一章 面向对象编程(中级部分) PDF为主 1.1 IDEA 删除当前行,ctrl+y 复制当前行,ctrl+d 补全代码,alt+/ 添加或者取消注释,ctrl+/ ...
- 【剑指offer】Java实现(持续更新中)
面试题3 二维数组中的查找 Leetcode--74 Search a 2D Matrix /*Java Write an efficient algorithm that searches for ...
- java常用注解(更新中)
注解根据来源可分为: 系统注解(自带的,取决于JDK版本).自定义注解及第三方注解 系统注解根据用途又可分为: java内置注解和元注解 根据运行机制(保留到什么时候)可分为: 源码注解.编译注解和运 ...
- Java ----------- 正则表达式(更新中。。。。。。)
RegEx:Regular Expression. 元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,“\\n”匹配\n.“\n”匹配换行符.序列“\\”匹配“\”而“\ ...
- VS Code Java 2 月更新!教育特别版:单元测试、GUI开发支持、Gradle项目创建、以及更多!
新春快乐!欢迎来到 Visual Studio Code Java 的 2 月更新,这个月我们给大家带来了一期教育特别版.每年的年初是许多学校开学的时间,为了给学生和教师提供在 Visual Stud ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
- Lithium中关键特性更新
Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...
- 《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)
第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Ope ...
- 关于Java,那些我心存疑惑的事(不断更新中...)
本文主要列出一些Java常用到确又让大家不怎么注意的问题. 将会不断更新,欢迎关注-- 如有觉得不合理之处,欢迎评论交流,没有火花怎么印象深刻? (1)Java到底是值传递?还是引用传递? 揪出这个问 ...
- java基础知识汇总(持续更新中....)
1.java四大特性:抽象.继承.封装,多态 构造函数: http://blog.csdn.net/qq_33642117/article/details/51909346 2.java数据基本类型: ...
随机推荐
- 使用git rebase去掉无谓的融合
git pull 預設的行為是將遠端的 repo. 與本地的 repo. 合併,這也是 DVCS 的初衷,將兩個 branch 合併.但是,很多時候會發生以下這種情形: 這是因為,我們團隊的開發模式是 ...
- Alpha事后分析
设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件的功能主要是让一些基于表单识别的项目(如微软智能表单识别项目)减少在数据生成方面上浪费的 ...
- 有哪些适合中小企业使用的PaaS平台?
对于中小企业来说,在业务上同样需要工作流.应用平台来进行支持,但是,面对诸如ERP等动辄好几十万的费用来说,完全是在增加运营成本.如何解决中小企业对于业务应用.工作流管理的需求问题呢?使用PaaS低代 ...
- uni-app 微信支付
小程序 支付 先看官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml 知晓有那些比不可少的流程,之后后端 ...
- Nacos C++客户端开发文章
前段时间关注了下阿里巴巴发起的开源项目Nacos,这是一个注册.配置中心(Naming And Config),支持各种语言的客户端,但是唯独没有C++的,考虑到以前做过一段时间的C++程序员,不禁一 ...
- Java集合详解(三):LinkedList原理解析
概述 本文是基于jdk8_271源码进行分析的. LinkedList底层是基于链表实现.链表没有长度限制,内存地址不需要固定长度,也不需要是连续的地址来进行存储,只需要通过引用来关联前后元素即可完成 ...
- $(cd "$(dirname "$0")",pwd) 解析
xx.sh 文件内容如下: #!/bin/bash BIN_FOLDER=$(cd "$(dirname "$0")";pwd) echo $BIN_FOLDE ...
- 测usb读写
dd if=/dev/sda of=/dev/null bs=1M count=1000每次测完 清一下 memory cacheecho 3 > /proc/sys/vm/drop_cache ...
- SpringBoot2 单元测试类的报错问题
问题描述 执行 SpringBoot2 测试时报错,提示找不到 SsmApplicationTests 主类 原因分析 Junit5 升级了框架没有兼容 问题解决 <!--测试模块--> ...
- STM32串口编程易错点
注意 串口发送函数 使用STM官方的LIB 中的库函数发送之后 加一点延时 否则会错误 接收数据不正常 正确做法是 加上等待发送完成