验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java中Lambda表达式和函数式接口怎么使用

阅读:1139 来源:乙速云 作者:代码code

Java中Lambda表达式和函数式接口怎么使用

      1.概述

      当Java 8发布时,其中最令人兴奋的特性之一就是 Lambda 表达式。Lambda 表达式是一种轻量级、简洁和高效的函数式编程方法。它可以用来代替 Java 旧有的匿名内部类,提高代码的可读性和可维护性。

      2.lambda表达式的基础

      Lambda 表达式是一个匿名函数,由输入参数和处理逻辑两部分组成:

      (parameter1, parameter2, ...) -> { code block }

      输入或者输出可以为空:

      () -> System.out.println("Hello, world!")
      (a) -> {}
      () -> {}

      多参数用括号,单参数可以不用括号:

      (a,b) -> a+b
      a -> System.out.print(a)

      多条处理逻辑用花括号,单条处理逻辑可以不用花括号:

      (a,b) -> a+b;
      (a,b) -> {a+b;a-b;}

      3.JAVA中的lambda表达式

      要在 Java 中使用 Lambda 表达式,需要将它们赋值给一个函数式接口变量。函数式接口是只包含一个抽象方法的接口,它们提供了一种定义 Lambda 表达式类型的方式。例如,下面的函数式接口 MyInterface 包含了一个抽象方法 doSomething

      interface MyInterface {
          void doSomething();
      }

      要使用 Lambda 表达式实现这个接口,只需要提供一个与 doSomething 方法签名匹配的 Lambda 表达式即可。例如,下面的代码使用 Lambda 表达式创建了一个 MyInterface 对象,并调用了它的 doSomething 方法:

      MyInterface myLambda = () -> System.out.println("Hello, world!");
      myLambda.doSomething();

      在这个例子中,我们使用 Lambda 表达式创建了一个 MyInterface 对象,并将它赋值给了 myLambda 变量。然后,我们调用了 myLambda.doSomething() 方法,输出了 Hello, world!

      4.函数式接口

      内置函数式接口

      概述

      JDK8内置实现了一些常用的函数式接口:

      接口作用
      Function程序中映射逻辑的抽象
      Predicate程序中判断逻辑的抽象
      Consumer程序中的消费型逻辑的抽象
      Suppiler程序中的生产逻辑的抽象

      Function

      Function接口,可以定义入参和出参的类型,可用于类型转换。

      代码示例:

      Function function=(String i)-> Integer.parseInt(i);
      System.out.println(function.apply("1")==1);

      Predicate

      Predicate接口,指定返回值为布尔类型,可用于断言。

      public static void main(String[] args) {
              Predicate predicate = (s) -> s.length() > 0;
              // 测试字符串的长度是否>0
              System.out.println(predicate.test("hello"));
              // 结果取反
              System.out.println(predicate.negate().test("hello"));
              System.out.println("=====or / and======");
              System.out.println(predicate.test(""));
              // 增加或判断,二者满足其一则为true
              System.out.println(predicate.or(s -> s.equals("")).test(""));
              // 增加与判断,二者都满足则为true
              System.out.println(predicate.and(s -> s.equals("hello")).test(""));
              System.out.println(predicate.and(s -> s.equals("hello")).test("hello"));
              System.out.println("=====isEqual======");
              // 判断是否相等
              System.out.println(Predicate.isEqual("hello").test(""));
              System.out.println(Predicate.isEqual("hello").test("hello"));
              Predicate nonNull = Objects::nonNull;
              Predicate isNull = Objects::isNull;
              Predicate isEmpty = String::isEmpty;
              Predicate isNotEmpty = isEmpty.negate();
          }

      Consumer

      Consumer接口,又叫消费接口,没有返回值,就像把输入消费掉了一样。

      public static void main(String[] args) {
         Consumer consumer1 = new Consumer() {
         @Override
         public void accept(Object o) {
           System.out.println("这次消费了:" + o.toString());
           }
         };
         consumer1.accept("100w元在双十一!这下穷死了!");
         Consumer consumer2 = s -> System.out.println("这次消费了:" + s);
         consumer2.accept("120w元在双十二!又穷死了!");
      }

      Suppiler

      Suppiler接口,又叫生产接口,可以自定义返回值,用来生产一些东西。

      public static void main(String[] args) {
          // 生成一个字符串
          Supplier supplier1 = () -> "abcde";
          // 生成一个随机数
          Supplier supplier2 = () -> new Random().nextInt(10);
          // 产生一个运行时异常
          Supplier supplier3 = () -> new RuntimeException();
          System.out.println(supplier1.get());
          System.out.println(supplier2.get().intValue());
          System.out.println(supplier3.get());
      }

      5.级联与柯里化

      级联表达式,含有多个箭头的lambda表达式,即“套娃”lambda表达式。

      以下列lambda表达式为例:

      x->y->x+y

      假设输入的为Integer类型,

      用Function接口来表达即为:

      输入一个Integer x,返回一个Integer y,

      Integer y又可以用Function接口来表示为:

      输入一个Integer,返回一个Integer

      Function> functionFunction= x->y->x+y;
      System.out.println(functionFunction.apply(2).apply(3));
      分享到:
      *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
      相关文章
      {{ v.title }}
      {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
      你可能感兴趣
      推荐阅读 更多>

      {{ basic.bottom_text }}