黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java8中的雙冒號運算符

Java8中的雙冒號運算符

更新時間:2022-12-06 11:09:42 來源:動力節點 瀏覽1770次

1. 概述

在這篇文章中,我們將討論雙冒號運算符(::)在Java 8和場景的操作員可以使用。

2. 從λ雙冒號運算符

Lambdas表達式,我們看到,代碼可以變得非常簡潔。

例如,要創建一個比較器,以下語法就足夠了:

Comparator c = (Computer c1, Computer c2) -> c1.getAge().compareTo(c2.getAge());

然后,類型推斷:

Comparator c = (c1, c2) -> c1.getAge().compareTo(c2.getAge());

但我們能讓上面的代碼更加富有表現力和可讀嗎?讓我們看一看:

Comparator c = Comparator.comparing(Computer::getAge);

我們使用:運營商作為λ速記調用一個特定的方法——的名字。最后,結果當然是更可讀語法。

3.它是如何工作的呢?

非常簡單地說,當我們使用一個方法參考——目標參考前放置分隔符::方法的名稱后提供。

例如:

Computer::getAge;

我們正在尋找一個方法參考方法getAge計算機類中定義。

我們可以操作的函數:

Function<Computer, Integer> getAge = Computer::getAge;
Integer computerAge = getAge.apply(c1);

請注意,我們引用函數,然后將它應用到合適的參數。

4. 方法引用

我們可以好好利用這個運營商相當一段場景。

(1)靜態方法

首先,我們將使用一個靜態的實用方法:

List inventory = Arrays.asList(
  new Computer( 2015, "white", 35), new Computer(2009, "black", 65));
inventory.forEach(ComputerUtils::repair);

(2)現有對象的一個實例方法

接下來,讓我們看一看一個有趣的場景——現有對象實例的引用一個方法。

Computer c1 = new Computer(2015, "white");
Computer c2 = new Computer(2009, "black");
Computer c3 = new Computer(2014, "black");
Arrays.asList(c1, c2, c3).forEach(System.out::print);

(3)一個實例方法的任意一個特定類型的對象

Computer c1 = new Computer(2015, "white", 100);
Computer c2 = new MacbookPro(2009, "black", 100);
List inventory = Arrays.asList(c1, c2);
inventory.forEach(Computer::turnOnPc);

如你所見,我們引用turnOnPc方法而不是一個具體的實例,但是在類型本身。

在4號線實例方法turnOnPc將呼吁每個對象的庫存。

這自然意味著c1 - turnOnPc方法將被稱為計算機實例和c2 MacbookPro實例上。

(4)一個超級某個特定對象的方法

假設你有以下方法在計算機超類:

public Double calculateValue(Double initialValue) {
    return initialValue/1.50;
}

這一個在MacbookPro子類:

@Override
public Double calculateValue(Double initialValue){
    Function<Double, Double> function = super::calculateValue;
    Double pcValue = function.apply(initialValue);
    return pcValue + (initialValue/10) ;
}

調用calculateValue方法MacbookPro實例:

macbookPro.calculateValue(999.99);

也會產生也在電腦上調用calculateValue超類。

5. 構造函數引用

(1)創建一個新的實例

引用一個構造函數實例化一個對象可以很簡單:

@FunctionalInterface
public interface InterfaceComputer {
    Computer create();
}
InterfaceComputer c = Computer::new;
Computer computer = c.create();

如果你在一個構造函數有兩個參數嗎?

BiFunction<Integer, String, Computer> c4Function = Computer::new; 
Computer c4 = c4Function.apply(2013, "white");

如果參數是三個或更多,你必須定義一個新功能界面:

@FunctionalInterface 
interface TriFunction<A, B, C, R> { 
    R apply(A a, B b, C c); 
    default <V> TriFunction<A, B, C, V> andThen( Function<? super R, ? extends V> after) { 
        Objects.requireNonNull(after); 
        return (A a, B b, C c) -> after.apply(apply(a, b, c)); 
    } 
}

然后,初始化您的對象:

TriFunction <Integer, String, Integer, Computer> c6Function = Computer::new;
Computer c3 = c6Function.apply(2008, "black", 90);

(2)創建一個數組

最后,讓我們看看如何創建計算機對象數組和五個要素:

Function <Integer, Computer[]> computerCreator = Computer[]::new;
Computer[] computerArray = computerCreator.apply(5);

以上就是關于“Java8中的雙冒號運算符”的介紹,大家如果想了解更多相關知識,可以關注一下本站的Java教程,里面還有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚州视频一区二区 | 日本www色视频 | 日韩欧美~中文字幕 | 中文在线日本免费永久18近 | 久久精品视频网 | 播五月婷婷 | 精品亚洲综合久久中文字幕 | 成年人视频在线观看免费 | 伊人激情在线 | 国产成人免费高清在线观看 | 国内自拍欧美 | 又色又爽又黄的网站 | 欧美成人精品第一区二区三区 | 午夜影院一区二区三区 | 免费一看一级毛片 | 日韩在线2020专区 | 中文字幕日韩国产 | 一级特黄aa毛片免费观看 | 91在线精品麻豆欧美在线 | 欧美一区二区三区不卡免费观看 | 毛片在线不卡 | 五月激情小说网 | 国产午夜一区二区在线观看 | 一级做a爱片久久蜜桃 | 成年网站在线观看 | 狠狠色婷婷 | 黄色片免费观看网站 | 欧美亚洲国产激情一区二区 | 免费在线观看成人 | 国产精品密蕾丝视频 | 就爱啪啪手机版 | 国产精品精品国产 | 日日日插插插 | 中文字幕一区二区三区在线不卡 | 天天摸天天操 | a毛片免费全部播放毛 | 免费看黄色三级毛片 | aaa级大片| 日韩午夜高清福利片在线观看 | 4四虎44虎www在线影院麻豆 | 特级淫片波多野结衣 |