Java8新特性

之前零零散散写了很多java8的内容,今天做一个整理,也算是整理用到的内容,当然细化的话还有很多,只是说暂时用不到,为了面试的话已经够了

  • 日期计算
  • Lambda表达式
  • 函数式接口(比较器Comparator接口)
  • 方法引用
  • Stream流操作
  • Optional
  • Base64
  • 其他(HashMap性能提升,IO/NIO改进)

  1. 日期计算

之前写过关于下星期一打款的工具类,但是新看到了java8中附带了,比我写的简单多了,记录一下

计算当前时间有关的----某个星期几

  1. public static Date dateNextMonday(String date) {
  2. /*Calendar获取的Week顺序:星期日 星期一 星期二 星期三 星期四 星期五 星期六*/
  3. int[] weekDays = {1, 7, 6, 5, 4, 3, 2};
  4. Calendar calendar = Calendar.getInstance();
  5. int addDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
  6. calendar.add(Calendar.DATE, weekDays[addDay]);//当前时间的下周一
  7. // 将时分秒,毫秒域清零
  8. calendar.set(Calendar.HOUR_OF_DAY, 0);
  9. calendar.set(Calendar.MINUTE, 0);
  10. calendar.set(Calendar.SECOND, 0);
  11. calendar.set(Calendar.MILLISECOND, 0);
  12. return calendar.getTime();
  13. }

Java8实现:

  1. /*Java8---日期*/
  2. /* LocalDate independenceDay = LocalDate.of(2020, Month.SEPTEMBER, 27);
  3. DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
  4. System.out.println(dayOfWeek);*/
  5. LocalDateTime sylvester = LocalDateTime.of(2020, Month.SEPTEMBER, 27, 23, 59, 59);
  6. DayOfWeek dayOfWeek = sylvester.getDayOfWeek();
  7. System.out.println(dayOfWeek);
  8. Month month = sylvester.getMonth();
  9. System.out.println(month);
  1. Lambda表达式

    有句话感觉说的很好,Lambda主要就是简洁代码量,

  2. 函数式接口

    之前笔记:https://www.cnblogs.com/meditation5201314/p/13192254.html

  3. 方法引用

    就是内部使用静态类,简化代码

    1. //Hero内部中:
    2. public static int compareByName(Hero a, Hero b) {
    3. return a.getName().compareToIgnoreCase(b.getName());
    4. }
    5. /*************************************************************/
    6. Hero[] heros = new Hero[]{
    7. new Hero("ASDF3", 12, 12),
    8. new Hero("ASDF2", 12, 12),
    9. new Hero("ASDF", 12, 12),
    10. new Hero("ASDF", 12, 12)
    11. };
    12. /*从小到大排序*/
    13. //匿名类
    14. Arrays.sort(heros, new Comparator<Hero>() {
    15. @Override
    16. public int compare(Hero o1, Hero o2) {
    17. return o1.getName().compareTo(o2.getName());
    18. }
    19. });
    20. //Lambda表达式
    21. Arrays.sort(heros, (Hero o1, Hero o2) -> {
    22. return o1.getName().compareTo(o2.getName());
    23. });
    24. //方法引用
    25. Arrays.sort(heros, Hero::compareByName);
    26. Arrays.stream(heros).forEach(System.out::println);
  4. Stream流操作

    具体可以见学习链接:https://how2j.cn/k/lambda/lambda-lamdba-tutorials/697.html

    昨天的异步Stream也包含在这里面:https://www.cnblogs.com/meditation5201314/p/13647538.html

    1. String[] strings = new String[]{"asdf", "fsdfa", "asdff"};
    2. Arrays.stream(strings).filter(s -> s.startsWith("a")).forEach(System.out::println);
    3. Arrays.stream(strings).map(String::toUpperCase).sorted((a, b) -> a.compareTo(b)).forEach(System.out::println);
    4. System.out.println(Arrays.stream(strings).allMatch(s -> s.startsWith("a")));
    5. System.out.println(Arrays.stream(strings).filter(s -> s.startsWith("a")).count());
  5. Optional

    1. Optional<String> reduced = Arrays.stream(strings).sorted().reduce((s1, s2) -> s1 + "$" + s2);
    2. reduced.ifPresent(System.out::println);
    1. Hero hero = new Hero();
    2. Hero newHero = new Hero();
    3. newHero.setName("这是新Hero");
    4. Optional<Hero> heroOptional = Optional.ofNullable(hero);
    5. heroOptional.ifPresent(System.out::println); //不为空就输出
    6. System.out.println(heroOptional.orElse(newHero)); //不为空就原样输出,为空就输出新的
    7. System.out.println(heroOptional.orElseGet(()->functionReturn())); //不为空就原样输出,为空就输出函数返回值
    8. System.out.println("========");
    9. System.out.println(heroOptional.map(hero1 -> hero1.getName()).map(name-> name.toUpperCase()).orElse("asdf")); //循环检查

  6. Base64

    1. public class Base64 {
    2. public static void main(String[] args){
    3. final String text = "Base64 finally in Java 8!";
    4. final String encoded = java.util.Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
    5. System.out.println(encoded);
    6. final String decoded = new String(java.util.Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
    7. System.out.println(decoded);
    8. }
    9. }
  7. 其他

    HashMap引入红黑树,性能得到优化(之前一直以为都有红黑树,结果是java8引入的)

    Io/Nio

    遍历当前目录的文件和目录

    1. Files.list(new File(".").toPath()).forEach(System.out::println);

Java-Java8特性(更新中)的更多相关文章

  1. 韩顺平Java(持续更新中)

    原创上课笔记,转载请注明出处 第一章 面向对象编程(中级部分) PDF为主 1.1 IDEA 删除当前行,ctrl+y 复制当前行,ctrl+d 补全代码,alt+/ 添加或者取消注释,ctrl+/ ...

  2. 【剑指offer】Java实现(持续更新中)

    面试题3 二维数组中的查找 Leetcode--74 Search a 2D Matrix /*Java Write an efficient algorithm that searches for ...

  3. java常用注解(更新中)

    注解根据来源可分为: 系统注解(自带的,取决于JDK版本).自定义注解及第三方注解 系统注解根据用途又可分为: java内置注解和元注解 根据运行机制(保留到什么时候)可分为: 源码注解.编译注解和运 ...

  4. Java ----------- 正则表达式(更新中。。。。。。)

    RegEx:Regular Expression. 元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,“\\n”匹配\n.“\n”匹配换行符.序列“\\”匹配“\”而“\ ...

  5. VS Code Java 2 月更新!教育特别版:单元测试、GUI开发支持、Gradle项目创建、以及更多!

    新春快乐!欢迎来到 Visual Studio Code Java 的 2 月更新,这个月我们给大家带来了一期教育特别版.每年的年初是许多学校开学的时间,为了给学生和教师提供在 Visual Stud ...

  6. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  7. Lithium中关键特性更新

    Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...

  8. 《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)

    第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Ope ...

  9. 关于Java,那些我心存疑惑的事(不断更新中...)

    本文主要列出一些Java常用到确又让大家不怎么注意的问题. 将会不断更新,欢迎关注-- 如有觉得不合理之处,欢迎评论交流,没有火花怎么印象深刻? (1)Java到底是值传递?还是引用传递? 揪出这个问 ...

  10. java基础知识汇总(持续更新中....)

    1.java四大特性:抽象.继承.封装,多态 构造函数: http://blog.csdn.net/qq_33642117/article/details/51909346 2.java数据基本类型: ...

随机推荐

  1. 免费JS甘特图组件dhtmlxgantt

    安装 参考:https://docs.dhtmlx.com/gantt/desktop__install_with_bower.html 可使用NuGet.Bower.npm包管理器安装(应用在asp ...

  2. MySQL锁等待与死锁问题分析

    前言: 在 MySQL 运维过程中,锁等待和死锁问题是令各位 DBA 及开发同学非常头痛的事.出现此类问题会造成业务回滚.卡顿等故障,特别是业务繁忙的系统,出现死锁问题后影响会更严重.本篇文章我们一起 ...

  3. [知识路书]beta设计和计划

    [知识路书]beta设计和计划 一.需求再分析 根据用户反馈,是否发现之前的需求分析有偏差?为什么会出现这种偏差?beta阶段你们是否能真的分析清楚用户需求?如何做到? 根据alpha阶段的推广情况以 ...

  4. 基于混合云模式的calico部署

    开始前准备 确定calico数据存储 Calico同时支持kubernetes api和etcd数据存储.官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式.而官方给出的e ...

  5. [刷题] 257 Binary Tree Paths

    要求 给定一棵二叉树,返回所有表示从根节点到叶子节点路径的字符串 示例 ["1->2->5","1->3"] 思路 递归地返回左右子树到叶子节 ...

  6. Canal和Otter介绍和使用

    Canal Canal原理 原理相对比较简单: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql master收 ...

  7. 如何解决在WordPress安装Redis插件时需要输入FTP问题?

    用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...

  8. Ansible命令行方式执行

    Ansible ad-hoc 什么是ad-hoc? 临时命令,执行完不会保存,类似于批量执行命令. ansible的选项 -i # 指定主机清单 ansible rsync -m ping -i 1. ...

  9. IT菜鸟之网站搭建(emlog)

    由多个网页组成的一种集合,叫做网站 网站分为:静态网站.动态网站  静态网站:不会因为时间.地点.用户角色等因素发生内容改变的网站 动态网站:会因为时间.地点.用户角色等因素发生内容改变的网站 注意: ...

  10. 将.netcore5.0(.net5)部署在Ubuntu的docker容器中

    环境:     宿主机:winows 10 家庭版     虚拟机管理软件:Hyper-V     虚拟机系统:Ubuntu 20.10     Docker版本:Docker CE 20.10.2 ...