欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA8之函數(shù)式編程Function接口用法

 更新時(shí)間:2020年12月07日 09:47:44   作者:Zn昕  
這篇文章主要介紹了JAVA8之函數(shù)式編程Function接口用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

從這章開始,會(huì)介紹幾個(gè)常用的函數(shù)式接口工具,首先先來看下這個(gè)大家族:

首先從Function接口開始介紹

一. 概述

該接口顧名思義,函數(shù)的意思,就像是數(shù)學(xué),是給定一個(gè)參數(shù)然后返回結(jié)果.該類方法如下:

package java.util.function;
import java.util.Objects;
 
@FunctionalInterface
public interface Function<T, R> {
 
 R apply(T t);
 
 default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
  Objects.requireNonNull(before);
  return (V v) -> apply(before.apply(v));
 }
 
 default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
  Objects.requireNonNull(after);
  return (T t) -> after.apply(apply(t));
 }
 
 static <T> Function<T, T> identity() {
  return t -> t;
 }

1. apply方法

該接口的唯一個(gè)抽象類是apply方法,接受一個(gè)類型的參數(shù),有返回值.功能是將參數(shù)賦予相應(yīng)的方法.

2. compose方法

默認(rèn)方法,先用入?yún)⑷フ{(diào)用apply方法,然后再用調(diào)用者去調(diào)用apply方法.調(diào)用的Object.requireNonNull是java7的新特性,如果before是null值的話直接拋出異常.

3. andThen方法

默認(rèn)方法,與compose方法相反,先用調(diào)用者去調(diào)用apply方法,然后再用入?yún)⑷フ{(diào)用apply方法.

4. identity方法

靜態(tài)方法,java8新特性,返回當(dāng)前正在執(zhí)行的方法.

二. 示例

不難看出,除了第一個(gè)方法以外,其他三個(gè)方法的返回值都是Function,所以后面三個(gè)方法是可以鏈?zhǔn)秸{(diào)用(即用"."方法)的,就如建造者模式(Build)一樣.理論講完,上代碼:

package com.yczuoxin.demo; 
import java.util.function.Function; 
public class FunctionTest {
 public static void main(String[] args) {
  // 先聲明方法
  Function<Integer, Integer> funcDouble = (n) -> n * 2;
  Function<Integer, Integer> funcPlus2 = (n) -> n + 2;
 
  System.out.println(funcDouble.apply(3));
  System.out.println(funcPlus2.apply(3));
 
  System.out.println(funcDouble.andThen(funcPlus2).apply(3));
  System.out.println(funcDouble.compose(funcPlus2).apply(3));
  System.out.println(Function.identity().compose(funcDouble).apply(8));
 }
}

運(yùn)行結(jié)果:

把計(jì)算過程也寫在上面應(yīng)該就能知道執(zhí)行順序了吧.

三. 總結(jié)

這個(gè)工具類感覺就是回到了學(xué)數(shù)學(xué)的場(chǎng)景,自己規(guī)定函數(shù),然后調(diào)用函數(shù),其實(shí)不僅僅可以調(diào)用一次andThen方法,后面還以加,只是沒有寫出來而已,大家可以自己去嘗試一下.

補(bǔ)充知識(shí):JAVA8之函數(shù)式編程Predicate接口

一.概述

先上這個(gè)接口的源碼:

package java.util.function; 
import java.util.Objects; 
@FunctionalInterface
public interface Predicate<T> {
 
 boolean test(T t);
 
 default Predicate<T> and(Predicate<? super T> other) {
  Objects.requireNonNull(other);
  return (t) -> test(t) && other.test(t);
 }
 
 default Predicate<T> negate() {
  return (t) -> !test(t);
 }
 
 default Predicate<T> or(Predicate<? super T> other) {
  Objects.requireNonNull(other);
  return (t) -> test(t) || other.test(t);
 }
 
 static <T> Predicate<T> isEqual(Object targetRef) {
  return (null == targetRef)
    ? Objects::isNull
    : object -> targetRef.equals(object);
 }
}

1.test方法

該方法是接受一個(gè)傳入類型,返回一個(gè)布爾值.此方法應(yīng)用于判斷.

2.and方法,or方法

該些方法接收的是一個(gè)Predicate類型參數(shù),返回的也是一個(gè)Predicate類型.and方法用于兩個(gè)判斷是否都成立,與關(guān)系型運(yùn)算符"&&"相似.而or方法則用于兩個(gè)判斷是否有一個(gè)成立.與關(guān)系型運(yùn)算符"||"相似.

3.negate方法

該方法沒有傳入?yún)?shù),返回一個(gè)Predicate類型.此方法用于對(duì)判斷進(jìn)行取反.與關(guān)系型云算法"!"相似.

4.isEqual方法

該方法接收一個(gè)Object對(duì)象,返回一個(gè)Predicate類型.此方法用于判斷第一個(gè)test的方法與第二個(gè)test方法相同(equal).

二. 示例

寫一個(gè)判斷字符串的一個(gè)判斷工具類,包含Predicate4種方法,并返回判斷結(jié)果.

package com.yczuoxin.demo.predicate; 
import java.util.function.Predicate; 
public class PredicateUtil {
 public static boolean judgeString(String str, Predicate<String> p){
  if(null == str){
   return false;
  }
  return p.test(str);
 }
 
 public static boolean judgeNoString(String str, Predicate<String> p){
  if(null == str){
   return false;
  }
  return p.negate().test(str);
 }
 
 public static boolean judgeAndDoubleString(String str, Predicate<String> p1, Predicate<String> p2){
  if(null == str){
   return false;
  }
  return p1.and(p2).test(str);
 }
 
 public static boolean judgeOrDoubleString(String str, Predicate<String> p1, Predicate<String> p2){
  if(null == str){
   return false;
  }
  return p1.or(p2).test(str);
 }
}

測(cè)試字符串長度是否大于4的方法用例:

package com.yczuoxin.demo.predicate; 
import java.util.function.Predicate; 
public class PredicateTest {
 public static void main(String[] args) {
  String testString = "abcde";
  // 判斷字符串長度是否大于4
  System.out.println(PredicateUtil.judgeString(testString,p->p.length()>4));
  // 判斷字符串長度是否大于4再取反
  System.out.println(PredicateUtil.judgeNoString(testString,p->p.length()>4));
  // 判斷字符串長度是否大于4并且小于8
  System.out.println(PredicateUtil.judgeAndDoubleString(testString,p->p.length()>4,p->p.length()<8));
  // 判斷字符串長度是否小于4并且大于8
  System.out.println(PredicateUtil.judgeOrDoubleString(testString,p->p.length()<4,p->p.length()>8));
  // 判斷當(dāng)前方法是否是"test"方法.
  System.out.println(Predicate.isEqual("test").test("test"));
  System.out.println(Predicate.isEqual("test").test("test1"));
 }
}

測(cè)試結(jié)果:

三. 總結(jié)

Predicate適合在工具類和條件篩選的條件下使用,減少if...else的使用,并且使用靈活.

以上這篇JAVA8之函數(shù)式編程Function接口用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán)

    Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán)

    本文主要介紹了Spring?Security使用數(shù)據(jù)庫登錄認(rèn)證授權(quán),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java While循環(huán) do-while循環(huán)用法

    Java While循環(huán) do-while循環(huán)用法

    循環(huán)語句就是讓計(jì)算機(jī)根據(jù)條件做循環(huán)計(jì)算,在條件滿足時(shí)繼續(xù)循環(huán),條件不滿足時(shí)退出循環(huán),需要的朋友可以參考下
    2020-11-11
  • JAVA實(shí)現(xiàn)簡單停車場(chǎng)系統(tǒng)代碼

    JAVA實(shí)現(xiàn)簡單停車場(chǎng)系統(tǒng)代碼

    JAVA項(xiàng)目中正號(hào)需要一個(gè)停車收費(fèi)系統(tǒng),就整理出來java實(shí)現(xiàn)的一個(gè)簡單的停車收費(fèi)系統(tǒng)給大家分享一下,希望對(duì)大家有所幫助
    2017-04-04
  • 詳解SpringBoot統(tǒng)一響應(yīng)體解決方案

    詳解SpringBoot統(tǒng)一響應(yīng)體解決方案

    這篇文章主要介紹了詳解SpringBoot統(tǒng)一響應(yīng)體解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • java安全停止線程的方法詳解

    java安全停止線程的方法詳解

    這篇文章主要介紹了java安全停止線程的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    這篇文章主要介紹了詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例的相關(guān)資料,這里對(duì)http的請(qǐng)求和響應(yīng)進(jìn)行詳細(xì)分析并附有實(shí)現(xiàn)實(shí)例,需要的朋友可以參考下
    2017-07-07
  • Java實(shí)現(xiàn)的決策樹算法完整實(shí)例

    Java實(shí)現(xiàn)的決策樹算法完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的決策樹算法,簡單描述了決策樹的概念、原理,并結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)決策樹算法的相關(guān)操作技巧,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2017-11-11
  • 一文帶你掌握J(rèn)ava ImageIO類

    一文帶你掌握J(rèn)ava ImageIO類

    Java中的ImageIO類是Java標(biāo)準(zhǔn)庫中用于處理圖像的一個(gè)非常常用的 API,它提供了讀取和寫入多種常見圖像格式的功能,如JPEG、PNG、BMP、GIF等,本文將全面詳細(xì)地介紹Java中的ImageIO類的使用方法,需要的朋友可以參考下
    2023-05-05
  • 聊聊@RequestMapping和@GetMapping @PostMapping的區(qū)別

    聊聊@RequestMapping和@GetMapping @PostMapping的區(qū)別

    這篇文章主要介紹了@RequestMapping和@GetMapping及@PostMapping的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java怎么重命名?Amazon?S3?中的文件和文件夾

    Java怎么重命名?Amazon?S3?中的文件和文件夾

    在本文中,我們探討了使用適用于 Java 的 AWS 開發(fā)工具包重命名 S3 存儲(chǔ)桶中的文件和文件夾的方法,我們探索了兩種不同的情況,它們使用相同的概念來重命名對(duì)象,用新名稱復(fù)制它們并刪除原始名稱
    2023-10-10

最新評(píng)論