java(Day25)----注解,lambda,方法引用,新实践API

1.注解

概念:解释代码的代码,称为注解,也叫元代码

常用的注解

@Override:重写

@Deprecated:过时

@SupperessWarnings(“deprecation”):忽略警告

自定义注解

语法:

访问权限修饰符  @interface 注解名{

公共静态常量

注解的属性

}

注意:

  1. 注解的属性语法格式:

数据类型 属性名();

数据类型 属性名() default 默认值;

  1. 如果注解的属性没有默认值,使用注解时,必须给属性赋值
  2. 如果注解的属性有默认值,使用注解时,可以给该属性赋值,也可以不赋值
  3. 注解的属性的数据类型不能是集合

注解的使用

@注解名(属性名1=属性值1,属性名2=属性值2…)

注意:

  1. 可以不按照顺序赋值
  2. 有默认值的属性可以不赋值
  3. 如果注解中所有属性都有默认值或没有属性,此时可以忽略()不写;
  4. 如果注解中有且只有一个value属性,在使用注解时,可以忽略属性名不写

如:

@注解名(值)

2.元注解

概念:解释注解的注解

常用的元注解

@Target:

作用:限定注解的使用范围

值:

TYPE:可以在类上使用

FIELD:属性上使用

METHOD:方法上使用

PARAMETER:形参上使用

CONSTRUCTOR:构造函数

ANNOTATION_TYPE:在定义注解时使用

注意:自定义一个注解,不适用该注解时,自定义的注解可以在任何一处使用

@Retention

作用:限期器使用范围(下什么情况下使用)

值:

SOURCE:在java文件时可用

CLASS:编译为class文件时可用

RUNTIME:程序运行时可用

注意:

自定义的注解默认是java文件时可用

@Documented

作用:可以生成APIwenjiaj

@Inherited

作用:允许被继承

注意:不加时不被继承的

3.注解+反射

4.Jdk1.8新特性

函数式接口

简介:一个接口中只有一个抽象方法,该接口就是函数式接口

相关注解:

@FunctionInterface

作用:验证接口是否为函数式接口

系统提供的常见的函数式接口

接口名         分类     返回值类型       抽象方法

Consumer      void      accept(T t )       消费型接口

Supperlit<T>    T        get()            供给型接口

Function<T R>   R        apply(T t)        函数型接口

Predicate<T>    boolean   test(T t)         断言型接口

  1. Lambda

简介

一种特殊的匿名内部类

优点

语法简洁

节省内存,不会产生class文件

语法

()->{}

注意:

1.创建的匿名内部类中只有一个方法

2.在Lambda表达式中可以省略形参的数据类型

3. 在Lambda表达式中当只有一个形参时可以忽略小括号不写

4. 在Lambda表达式中当代码块中只有一行代码时,可以忽略大括号不写

5.当代码块中只有一行代码,该代码是返回值时,此时如果要省略大括号,也需将return去掉

6.方法引用

6.1简介

在Lambda表达式前提下一些特殊情况可以继续简化

常见形式

对象:实例方法

类:静态方法

类:实例方法

类:new   `

7.流

7.1简介

Stream:工作流

类似于集合,区别是集合中存储数据,流中存储过程

7.2特点

自己不会存储数据

不会改变源对象

7.3使用步骤

  1. 创建
  2. 中间操作

注意:中间键可以有多个

  1. 终止操作

注意:一旦进行终止操作,该流就不能在使用了

7.4创建

方式1:

通过Collection的Stream方法获取

通过Collection对象的parallelStream方法获取

方式2:

通过Arrays提供的stream方法

方式3:

通过Stream接口提供的of,iterate,generate

方式4:

通过Stream接口子类或子类接口对象调用of,iterate,genarate

7.5中间操作

Filter:过滤

list.stream()

.filter(e->e.getMoney()>15000)

.forEach(System.out::println);

Limit:分页(限制)

list.stream()

 .limit(2)

 .forEach(System.out::println);

Skip:跳过

list.stream()

.skip(2)

.forEach(System.out::println);

Distinct:去掉重复

list.stream()

  .distinct()

.forEach(System.out::println);

Sorted:排序

list.stream()

.sorted((e1,e2)->Double.compare(e1.getMoney(),e2.getMoney()))

.forEach(System.out::println);

Map映射操作

list.stream()

.map(e->e.getName())

.forEach(System.out::println);

Parallel并行流

list.stream()

.parallel()

.forEach(System.out::println);

注意:一个流可以有多个中间操作,也可以没有

7.6结束操作

Foreach遍历

list.stream().forEach(System.out::println);

Min最小值

Optional min=list.stream().min((o1,o2)->Integer.compare(o1.getMoney(), o2.getMoney()));

System.out.println(min.get());

Max最大值

Optional max=list.stream().max((e1,e2)->Integer.compare(e1.getMoney(), e2.getMoney()));

System.out.println(max.get());

Count数量

Long count=list.stream().filter(o->o.getMoney()>20000).count(); System.out.println(count);

Reduce:规约

Optional sum = list.stream() .map(e->e.getMoney())

.reduce((x,y)->x+y); System.out.println(sum.get());

Collect

注意:一个流有且只有一个结束操作

8.新时间API

简介

以前时间相关API时线程不安全的,而且在设计时就是混乱的

所以在jdk1.8时提供新的时间的API的类

提供的类有

LocalDate

LocalTime

LocalDateTime

替换Date

DateTimeFormatter

替换SimpleDateFormat

Instant

瞬时

ZoneId

时区

LocalDate

作用:本地日期

提供的方法:

Start LocalDate now();获取当前日期

Start LocalDate of();获取指定日期

LocalTime

作用:本地时间

提供的方法:

Start LocalTime now();获取当前时间

Start LocalTime of();获取指定日期

LocalDateTime

作用:本地日期时间

提供的方法:

Start LocalTime now();获取当前日期时间

Start LocalTime of();获取指定日期时间

getxxx():获取

withxxx():修改

plusxxx():增加

minus():减少

DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");

              //将固定格式的字符串转换为对象

              LocalDateTime dateTime = LocalDateTime.parse("2022年12月10日 13:14:52",formatter);

              System.out.println(dateTime);

              LocalDateTime dateTime2 = LocalDateTime.now();

              //将时间转换为固定格式的字符串

              String str = formatter.format(dateTime2);

              System.out.println(str);

Instant

转换

//将Date对象的时间转换为LocalDatetime对象

              Date date = new Date();

              Instant instant = date.toInstant();

              LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

              System.out.println(dateTime);

             

              //将LocalDatetime对象转换为Date对象

              LocalDateTime dateTime2 = LocalDateTime.of(2000, 1, 1, 12, 0,1);

              Instant instant2 = dateTime2.atZone(ZoneId.systemDefault()).toInstant();

              Date date2 = Date.from(instant2);

              System.out.println(date2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值