lomda和lombok

1、什么是Lambda表达式?

Lambda是一个匿名函数,可以理解为是一段可以传递的代码,可以将代码像传递参数、传递数据一样进行传输。使用Lambda表达式,可以写出更加紧凑、更加简洁、更加灵活的代码。

2、使用Lambda的限制条件

Lambda并不是任何地方都可以使用,Lambda表达式需要“函数式接口”的支持。

3、什么是函数式接口?

接口中只有一个抽象方法的接口,称为函数式接口,可以用@FunctionalInterface修饰一下,这里需要注意的是:未使用 @FunctionalInterfaces注解的接口未必就不是函数式接口,一个接口是不是函数式接口的条件只有一条,即接口中只有一个抽象方法的接口(Object类中的方法不算)。而使用@FunctionalInterface注解修饰了的接口就一定是函数式接口,添加@FunctionalInterface注解可以帮助我们检查是否是函数式接口。

JDK中常见的函数式接口有:

 @FunctionalInterface
 public interface Runnable {
     void run();
 }

 @FunctionalInterface
 public interface Callable<V> {
     V call() throws Exception;
 }

以下接口中有一个方法,但因hashCode()是Object类中的方法,因此该接口不是函数式接口:

@FunctionalInterface
public interface FuncInterface {	 
    int hashCode();  // Object类中的方法
}

4、Lambda表达式示例

未使用Lambda表达式时的写法:

public class LambdaTest {
	@Test
    public void print() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World");
            }
        });
        thread.start();
    }}

使用Lambda时的写法:

public class LambdaTest {
        public void print() {
            Thread thread = new Thread(() -> System.out.println("Hello World"));
        }
 }

5、Lambda表达式的语法

5.1 Lambda表达式的语法结构

(参数列表) -> {对抽象方法的实现}
Lambda表达式语法分在3个部分:
1 左边的参数列表,对应的是函数式接口中抽象方法的参数列表;
2 中间的符号:->,为固定写法; 
3 右边大括号内对函数接口抽象方法的实现。
Lambda表达式的在具体场景下可以有简略写法。

5.2 语法格式一:无参数,无返回值

Runnable runnable = () -> {System.out.println("Hello World");} 
Runnable runnable = () -> System.out.println("Hello World");  // 简写形式
此时,如果右边的代码简单,只有一行代码时,{}可以省略。

5.2 语法格式二:有一个参数,无返回值

public class CalculatorTest {

    public void print(Consumer<String> msg) {
        System.out.println(msg);
    }

    public void doPrint(String msg) {
        print((str) -> System.out.println(msg));
        print(str -> System.out.println(msg));  // 简写

    }
}
此时,左边的()可以省略。

5.3 语法格式三:Lambda体内只有一条语句,且有返回值,return可省略

 public Integer subtr(Integer v1,Integer v2) {
     return operator(v1,v2,(x,y) -> x - y);
 }

5.4 语法格式四:有两个以上参数,且Lambda体中有多条语句

public Integer add(Integer v1,Integer v2) {
             return operator(v1,v2,(x,y) -> {
                 System.out.println("进行加法运算");
                 return x + y;
             });
 }

5.5 语法格式五:Lambda表达式的数据类型可以省略不写

JVM编译器通过上下文可以推断出数据类型,但要注意的是,当多个参数时,要么都写,要么都不写,不能有的写,有的不写:
public Integer subtr(Integer v1,Integer v2) {
    return operator(v1,v2,(Integer x,y) -> x - y);   // 错误
}

public Integer subtr(Integer v1,Integer v2) {
    return operator(v1,v2,(x,y) -> x - y);    // 正确
}

6、Java8四大内置核心函数式接口

Consumer<T> : 消费型接口(无返回值,有去无回)
         void accept(T t);
 Supplier<T> : 供给型接口
         T get();
         
 Function<T,R> : 函数型接口
        R apply(T t);
        
 Predicate<T> : 断言型接口
        boolean test(T t);
        
四大核心接口的-->扩展子接口

lombok

lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。

常用注解
  • @Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
  • @Setter :注解在属性上;为属性提供 setting 方法
  • @Setter :注解在属性上;为属性提供 getting 方法
  • @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
  • @NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
  • @Cleanup : 可以关闭流
  • @Builder : 被注解的类加个构造者模式
  • @Synchronized : 加个同步锁
  • @SneakyThrows : 等同于try/catch 捕获异常
  • @NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
  • @Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。

lombok 引用文章:https://www.cnblogs.com/softidea/p/5960182.html
lombok 引用文章:https://blog.csdn.net/u011308294/article/details/78627560
lomda 引用文章:https://www.cnblogs.com/wuhenzhidu/p/lambda.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值