您的位置 首页 java

java8的新特性

  1. lambda表达式
  2. StreamAPI
  3. 新的日期和时间API

1.1 Lambda语法结构

  1. 1.1 ( params ) -> expression

1.1.2 (params) -> statement

1.1.3 (params) -> { statements }

params: 类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。

->:可理解为“被用于”

3.1.3 方法体这里可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,

例如以前启动个线程

java8的新特性

Java8用例

java8的新特性

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

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));

无参构造

java8的新特性

有参构造

java8的新特性

接口default默认实现方法

java8的新特性

接口静态实现方法

java8的新特性


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);


java8的新特性

java8的新特性

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));

java8的新特性


//多级分组 {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));

java8的新特性

//拼接 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


java8的新特性

修改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进行格式化操作:

java8的新特性

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之间的时长。举些例子:

java8的新特性

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

文章来源:智云一二三科技

文章标题:java8的新特性

文章地址:https://www.zhihuclub.com/188540.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图