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);
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。