zoukankan      html  css  js  c++  java
  • Java-Java8特性(更新中)

    Java8新特性

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

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

    1. 日期计算

    之前写过关于下星期一打款的工具类,但是新看到了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);
    
    1. Lambda表达式

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

    2. 函数式接口

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

    3. 方法引用

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

      //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);
      
    4. 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());
      
    5. 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"));       //循环检查
      

    6. 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);
          }
      }
      
    7. 其他

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

      Io/Nio

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

      Files.list(new File(".").toPath()).forEach(System.out::println);
      
  • 相关阅读:
    Mathematics:GCD & LCM Inverse(POJ 2429)
    MST:Out of Hay(POJ 2395)
    DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
    《程序员修炼之道——从小工到专家》阅读笔记*part1
    Java课05
    Java课04
    Javaweb课堂测试
    Java课03
    Java课02
    回文判断
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/13651755.html
Copyright © 2011-2022 走看看