第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 mapToInt 需要 Integer::parseInt 作為參數(shù)?

為什么 mapToInt 需要 Integer::parseInt 作為參數(shù)?

暮色呼如 2023-03-09 14:55:39
我試圖在下一個例子之后理解一些東西:    Stream.of("a1", "a2", "a3")             .map(s -> s.substring(1))             .mapToInt(Integer::parseInt)             .max()      . (etc.)為什么 mapToInt 需要    Integer::parseInt作為參數(shù)?它不應(yīng)該是隱含的嗎?這個參數(shù)不是多余的嗎?
查看完整描述

2 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊

區(qū)分調(diào)用的Stream#mapToInt(ToIntFunction)作用和參數(shù)ToIntFunction的作用很重要。

  • 對 的調(diào)用mapToInt是流將要執(zhí)行的操作(即將元素映射到int。

  • 參數(shù)ToIntFunction是流將如何int將每個元素映射到.


他們是否可以包含一個將s 隱式解析為s的無參數(shù)mapToInt方法?是的,但看看它的效果如何——這種情況遠(yuǎn)不及無參數(shù)方法那樣隨意或模棱兩可。StringintStream#sorted()mapToInt

無參數(shù)sorted方法假定元素是ComparableJava 中一個基本的、標(biāo)準(zhǔn)化的和廣泛使用的接口——任何類都可以實(shí)現(xiàn)該接口(而只有一個類可以是 )String。因此,雖然該方法不是類型安全的,但可以說用例足夠普遍以證明其存在的合理性。

mapToInt但是,假設(shè)元素為Strings 并將其內(nèi)容解析為 an 的無參數(shù)方法int是一個高度特定的用例。為什么這樣一個通用的 API 會提供這樣一個特定的操作?這將是一個完全武斷的決定,沒有合理的理由。例如,為什么不將每個映射String到它的length呢?為什么要String特別處理而不是其他類型?因此,該方法接受一個ToIntFunction參數(shù),該參數(shù)描述如何int根據(jù)具體情況將元素映射到。


注意到Integer::parseInt是一個方法引用可能會有所幫助,它是普通lambda 表達(dá)式的簡寫。兩者都是功能接口的實(shí)現(xiàn),比使用匿名類更簡潔。換句話說,您正在創(chuàng)建一個新ToIntFunction實(shí)例并將其作為參數(shù)傳遞。

以下所有內(nèi)容在功能上都是等效的:

// method reference

stream.mapToInt(Integer::parseInt)


// lambda expression

stream.mapToInt((String value) -> Integer.parseInt(value)) // explicit parameter types

stream.mapToInt(value -> Integer.parseInt(value))          // implicit parameter types


// anonymous class

stream.mapToInt(new ToIntFunction<>() {


    @Override

    public int applyAsInt(String value) {

        return Integer.parseInt(value);

    }


})

哪里stream是一個Stream<String>。


查看完整回答
反對 回復(fù) 2023-03-09
?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗 獲得超13個贊

你正在做的操作是這樣的:

Stream.of("a1", "a2", "a3")           //step1
        .map(s -> s.substring(1))     //step2
        .mapToInt(Integer::parseInt)  //step3
        .max()

您定義了一個字符串流(在第 1 步中),然后您將它們中的每一個丟棄掉上面的 1 個字符,留下“1”、“2”和“3”流,(第 2 步)但請注意,它們?nèi)匀皇亲址畬ο?..然后將其轉(zhuǎn)換為整數(shù),因此您需要為“mapToInt”提供一個以字符串作為參數(shù)并返回整數(shù)的“函數(shù)”(第 3 步)

這是在 Integer 類中定義的:

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)

您當(dāng)然可以編寫并傳遞自己的函數(shù)……但是為什么要重新發(fā)明輪子呢?:)


查看完整回答
反對 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 367 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號