- lambda表达式
- StreamAPI
- 新的日期和时间API
1.1 Lambda语法结构
- 1.1 ( params ) -> expression
1.1.2 (params) -> statement
1.1.3 (params) -> { statements }
params: 类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
->:可理解为“被用于”
3.1.3 方法体这里可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,
例如以前启动个线程

Java8用例

如果不对参数修改重写可以,只是在控制台打印点东西的话,可以这样写:

如果你的方法接收两个参数,可以写成如下这样:
(int x, int y) -> x+ y
forEach 循环
// Java 8之前:
List items= Arrays.asList(“test1”, “test2”, “test3”, “test4”);
for (String item : items) {
System.out.println(item );
}
方法引用
1.对象 :: 实例方法
2. 类 :: 静态方法
3. 类 :: 实例方法
// Java 8之后:
List items= Arrays.asList(“test1”, “test2”, “test3”, “test4”);
items.forEach(System.out::println);
或者
items.forEach(n -> System.out.println(n));
无参构造

有参构造

接口default默认实现方法

接口静态实现方法

2.1 Stream API
//通过Arrays
Stream<String> stream1 = Arrays.stream(new String[10]);
//通过Stream
Stream<Integer> stream2 = Stream.of(1, 2, 3);
//无限流迭代
Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2); iterate.limit(10).forEach(System.out::println);
//通过Stream.generate()
Stream<Double> generate = Stream.generate(() -> Math.random());generate.forEach(System.out::println);


list.stream().map(s -> s + 1) //映射
.flatMap(s -> Stream.of(s)) //和map差不多,但返回类型为Stream,类似 // list.add() 和list.addAll()的区别
.filter(s -> s < 1000) //过滤
.limit(5) //限制
.skip(1) //跳过
.distinct() //去重
.sorted() //自然排序
.sorted(Integer::compareTo) //自定义排序
Stream转集合
Set<Integer> collectTest = list.stream().collect(Collectors.toSet());
List<Integer> collectTest = list.stream() .collect(Collectors.toList());
HashSet<Integer> collect = list.stream() .collect(Collectors.toCollection(HashSet::new));

//多级分组 {group={321=[321], 456=[456], 789=[789, 789], 678=[678]}}Map<String, Map<Integer, List<Integer>>> collectTest = list.stream() .collect(Collectors.groupingBy((x) -> “group”, Collectors.groupingBy((x) -> x)));
//分区 {false=[222], true=[555, 888, 999, 333]}
Map<Boolean, List<Integer>> collectTest = list.stream() .collect(Collectors.partitioningBy((x) -> x > 500));

//拼接 a,b,c,d,e
String collectTest = list.stream() .map(s -> s.toString()) .collect(Collectors.joining(“,”));
//最大值
Optional<Integer> integer = list.stream().collect(Collectors.maxBy(Integer::compare));
System.out.println(integer.get());
新的日期和时间API (LocalDate)
//获取当天的日期信息:2019-07-16
使用 LocalDate.now();
LocalDate类型包含了年月日信息,下面举些LocalDate的使用示例:
LocalDate date = LocalDate.of(2018, 8, 30); // 2019-07-16
int year = date.getYear(); // 2019
int month = date.getMonth().getValue(); // 7
int day = date.getDayOfMonth(); // 16
// 查看该月有多少天
int days = date.lengthOfMonth(); // 31
// 是否是闰年
boolean isLeap = date.isLeapYear(); // false

修改LocalDate对象:
LocalDate date3 = LocalDate.of(2019, 7, 16); // 2019-07-16
LocalDate date4 = date3.withDayOfMonth(16); // 2019-07-16
LocalDate date5 = date3.with(ChronoField.DAY_OF_MONTH, 16); // 2019-07-16
LocalDate date6 = date3.withYear(2019); // 2019-07-16
LocalDate date7 = date3. plus Days(5); // 加5天
LocalDate date8 = date3.plus(5, ChronoUnit.DAYS); //加5天
LocalDate date9 = date3.minusYears(10); // 2009-07-16
LocalDate进行格式化操作:

LocalTime
LocalTime和LocalDate类似,区别在于LocalTime包含的是时分秒(毫秒)
LocalTime time = LocalTime.of(22, 43, 54); // 22:43:54
int hour = time.getHour(); // 22
int minute = time.getMinute(); // 43
int second = time.getSecond(); // 54
//字符串来创建
LocalTime time = LocalTime.parse(“22:45:54”);
LocalDateTime
LocalDateTime是LocalDate和LocalTime的组合形式,包含了年月日时分秒信息。
LocalDateTime ldt1 = LocalDateTime.of(2019, 7, 16, 22, 47, 51); // 2019-07-16T22:47:51
LocalDateTime ldt2 = LocalDateTime.of(date, time); // 2019-07-16T22:47:51
Duration
Duration用于计算两个LocalTime或者LocalDateTime的时间差,例如:
LocalTime time2 = LocalTime.of(22, 59, 59);
Duration duration = Duration.between(time1, time2);
long seconds = duration.getSeconds(); //秒
Period
用于计算两个LocalDate之间的时长。举些例子:

我是阳光随馨馨,如果你看完了,点个赞,加个关注,转发一下哈