zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    谷歌在外贸中的实战解析
    关于外贸淡季的几点看法
    如何打造完美报价单
    bbs
    你身上的所有光环,同样是套在你身上的枷锁
    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
    用C#生成随机中文汉字验证码的基本原理
    必须根据不同的数据内容来套用不同的编码或是译码函式,以便取得对应的字节或是字符串数据
    锁和多线程:5种锁介绍(三)
    锁和多线程:3种锁的使用(二)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15050223.html
Copyright © 2011-2022 走看看