7.22Java之Lambda表达式练习

7.22Java之Lambda表达式练习

使用Lmabda表达式定义一个无参数无返回值的方法

定义一个接口:

package PracticeReview.Lambda;

/**
* 定义一个接口,内含唯一一个抽象方法makeFood
* @since JDK 1.8
* @date 2021/07/22
* @author Lucifer
*/
public interface Cook {
   //定义无参数无返回值的方法
   public abstract void makeFood();
}

使用Lambda表达式对该接口进行实现:

package PracticeReview.Lambda;

/**
* Cook接口的测试类
* @since JDK 1.8
* @date 2021/07/22
* @author Lucifer
*/
public class CookDemoNo1 {
   public static void main(String[] args) {
       //调用invokeCook方法,参数是Cook接口,可以传递Cook接口的引用
       invokeCook(new Cook() {
           @Override
           public void makeFood() {
               System.out.println("这是第一次调用!");
          }
      });

       //使用lambda表达式让其简化匿名内部类的书写
       invokeCook(() -> {
           System.out.println("这是第二次调用!");
      });
  }
   //定义一个方法,参数传递接口,方法内部调用Cook接口当中的方法
   public static void invokeCook(Cook cook){
       cook.makeFood();
  }
   /*
   1、创建了一个Cook类接口,里面定义了一个抽象方法
   2、创建了一个调用方法,调用接口当中的抽象方法
   3、使用lambda表达式去调用接口当中的抽象方法
    */
}

Lambda表达式的参数和返回值

需求:
使用数组存储多个Person对象
对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
Answer
package PracticeReview.Lambda;

import java.util.Arrays;
import java.util.Comparator;

/**
* 根据需求写代码
*     需求:
*         使用数组存储多个Person对象
*       对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
* @since JDK 1.8
* @date 2021/07/23
* @author Lucifer
*/
public class ArraysDemoNo1 {
   public static void main(String[] args) {
       //使用数组存储多个Person对象
       Person[] arr = {
               new Person("柳岩", 18),
               new Person("迪丽热巴", 19),
               new Person("古力娜扎", 20)
      };

       //对数组中的Person对象使用Arrays的sort方法通过年龄进行升序(前边-后边)排序
       /*
       sort方法的传参是前面传一个数组后面传一个Comparator对象
       Comparator是一个接口,使用匿名内部类对其进行重写
        */
//       Arrays.sort(arr, new Comparator<Person>() {
//           @Override
//           public int compare(Person o1, Person o2) {
//               return o1.getAge() - o2.getAge();
//           }
//       });

       //使用Lambda表达式简化匿名内部类
       Arrays.sort(arr, (Person o1, Person o2) -> {
           return o1.getAge() - o2.getAge();
      });

       //遍历数组
       for (Person p : arr) {
           System.out.println(p);
      }
  }
}

Lambda表达式的参数和返回值练习2

需求:
给定一个计算器`Calculator`接口,内含抽象方法`calc`可以将两个int数字相加得到和值
使用Lambda表达式的标准格式调用`invokeCalc`方法,完成120和130的相加计算--->该方法传递两个整数和一个接口,里面通过接口中的方法计算两个整数的和并且输出
package PracticeReview.Lambda;

/**
* 根据需求写代码
* 需求:
*     用Lambda表达式的标准格式调用`invokeCalc`方法
*     完成120和130的相加计算--->该方法传递两个整数和一个接口
*     里面通过接口中的方法计算两个整数的和并且输出
* @since JDK 1.8
* @date 2021/07/23
* @author Lucifer
*/
public class CalculatorDemoNo1 {
   public static void main(String[] args) {
       //调用invokeCalc方法--->方法参数是一个接口,可以使用匿名内部类
       invokeCalc(10, 20, new Calculator() {
           @Override
           public int calc(int a, int b) {
               return a + b;
          }
      });

       //使用Lambda表达式简化匿名内部类的书写写法
       invokeCalc(120, 130, (int a, int b) -> {
           return a + b;
      });
  }

   /*
   定义一个方法
   参数传递两个int类型的整数和接口
   方法内部调用接口中的方法
   计算两个这个整数的和
    */
   public static void invokeCalc(int a, int b, Calculator c){
       //写方法体
       int sum = c.calc(a,b);
       System.out.println(sum);
  }
}

 

posted @ 2021-07-23 18:59  俊king  阅读(352)  评论(0编辑  收藏  举报