7.22Java之函数式编程思想

7.22Java之函数式编程思想

函数式编程思想概述

数学中的函数特点:

  • 输入值

  • f(x)

  • 输出值

相较于面向对象过分强调必须通过对象的形式来做事情,函数式思想尽量忽略面向对象的复杂语法。强调:

做什么,而不是什么形式做

面向对象的思想

  • 做一个事情

  • 找一个能完成事情的对象

  • 调用对象的方法

  • 完成事情

函数式的编程思想

  • 只要获取到结果

  • 谁去做的、怎么做的不重要

重视结果而不重视过程

冗余的Runnable代码

传统写法:

package PracticeReview.ThreadPool;

/**
* 使用实现Runnable接口的方式实现多线程程序
* @since JDK 1.8
* @date 2021/07/22
* @author Lucifer
*/
public class RunnableDemoNo1 {
   public static Runnable getRunnableImpl(Runnable runnable){
       //创建接口的实现类对象引用
       RunnableImpl r = new RunnableImpl(); //--->线程已经创建了
       //创建Thread类对象引用,构造方法中传递Runnable接口的实现类
       Thread thread = new Thread(runnable);
       //调用start方法开启新线程--->只是加入队列
       thread.start();

       return runnable;
  }

   public static void getThreadImpl(Runnable runnable){
       //使用匿名内部类实现多线程程序--->返回一个匿名内部类,用接口接收
       runnable = new Runnable(){
           @Override
           public void run(){
               System.out.println(Thread.currentThread().getName() + "This is a new way!");
          }
      };
       //创建线程对象,传递线程实现类对象,调用start方法开启多线程
       new Thread(runnable).start();
  }

   public static void getAnonymityClass(){
       new Thread(new Runnable() {
           @Override
           public void run() {
               System.out.println(Thread.currentThread().getName() + "This is an another new way!");
          }
      }).start();
  }

   public static void main(String[] args) {
       getRunnableImpl(new RunnableImpl());
       getThreadImpl(new RunnableImpl());
       getAnonymityClass();
  }
}

关键点

  • Thread类需要Runnable接口作为参数,其中的抽象run方法是线程执行的逻辑

  • 指定run的方法体,必须要Runnable接口的实现类

  • 为了省区定义一个RunableImpl实现类的麻烦,不得不使用匿名内部类

  • 必须重写抽象的run方法

  • 然后线程当中只有方法体才是关键

函数式编程思想的转换

做的事情:

run方法体内的代码传递给Thread类知晓

Lambda表达式

package PracticeReview.ThreadPool;

/**
* 使用匿名内部类+lambda的方式实现多线程
*/
public class LambdaDemoNo1 {
   public static void main(String[] args) {
       //使用Lambda表达式实现多线程
       new Thread(() -> {
           System.out.println(Thread.currentThread().getName() + "This is a new lambda expression!");
      }).start();
       /*
       new 线程对象的时候这个里面的()代表的是run方法的(),--->run方法有参数这里面就有参数
       后面{}就是重写run方法的大括号,这就是一个lambda表达式
        */
  }
}

优点:

  • 省去了实现类的定义以及语法结构

Lambda表达式的标准格式

组成部分:

  • 一些参数:

  • 一个箭头:"->"

  • 一段代码

('参数列表') -> {
   //重写方法的代码
}
/*
():接口中抽象方法的参数列表,无参数就空着,有参数就写出。多个参数用,分割
->:把参数传递给方法体
{}:重写接口的抽象方法的方法体
*/

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/15050223.html