Java8学习
Java系列记录文章。
学习笔记
lambda
允许通过::关键字获取方法(可以是类的静态方法,也可以是对象的方法)或者构造函数的的引用.
范围: 与匿名函数类似,可以访问对应外部区域的final变量,成员变量和静态变量. 默认方法无法在lambda表达式内部被访问.
内置函数式接口:
- Comparator
- Runnable
- Predicate 布尔型函数判断
- Function 接受一个参数,处理并返回
- Supplier 与Function的区别是没有输入参数
- Consumer
工具接口Optional
用来防止NullPointerException
- isPresent()
Streams/流
某种元素的序列,可在其上进行各种中间操作或完结操作
构造流:
- Collections.stream()
- Collection.parallelStream()
常用类:
- IntStream.rangeClosed(1,10),forEach()
常用函数式接口
- Filter接受一个predicate接口类型的变量,并将所有流对象中的元素进行过滤 (中间操作)
- Sorted能够返回一个排过序的流对象的视图,但不会改变原来集合中元素的顺序(中间操作)
- map是一个对于流对象的中间操作
- ForEach接受一个function接口类型的变量,用来执行对每一个元素的操作。ForEach是一个中止操作,不返回流。
- Match匹配操作是终结操作,只返回一个boolean类型的结果
- Count是一个终结操作
- Reduce该操作是一个终结操作,操作的结果会放在一个Optional变量里返回
日期和时间
这些时间对象都是不可变的,因此是线程安全的。
- Clock 当前时区相关
- LocalDateTime 与时区无关的本地时间
- Duration 时间区间
- DateTimeFormatter 新实现
常用方法:
Clock clock = Clock.systemDefaultZone();
// 替代 System.currentTimeMillis()
long millis = clock.millis();
Instant instant = clock.instant();
Date legacyDate = Date.from(instant); // legacy java.util.Date
// 时区
ZoneId zone = ZoneId.of("Asia/Chongqing");
LocalTime now = LocalTime.now(zone);
Instant instant = dateTime
.atZone(ZoneId.systemDefault())
.toInstant();
LocalDateTime dateTime = LocalDateTime.now();
LocalDate.of(2019, Month.OCTOBER,16);
dateTime.toLocalDate();
dateTime.getMonth();
// 更新时间
dateTime.withDayOfMonth(13).withYear(2018);
dateTime.plusDays(25).plusYears(2);
dateTime.with(TemporalAdjusters.lastDayOfMonth());
LocalTime t2 = LocalTime.parse("10:15:30");
t2.truncatedTo(ChronoUnit.MINUTES);
时间和字符串转化
LocalTime time = LocalTime.parse("17:07:30");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy");
LocalDate date = LocalDate.of(2019, Month.OCTOBER, 16);
System.out.println(date.format(formatter));