亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

java.util.function.Function.identity 方法的實際用途是什么?

java.util.function.Function.identity 方法的實際用途是什么?

夢里花落0921 2021-10-13 16:45:41
為什么我應該使用 Function.identity() 當它返回與它接收到的相同的東西而不使用輸入或以某種方式修改輸入的情況下?Apple apple = new Apple(10, "green");Function<Apple, Apple> identity = Function.identity();identity.apply(apple);必須有一些我無法弄清楚的實際用法。
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

預期用途是當您使用接受 aFunction來映射某些內容的方法時,您需要將輸入直接映射到函數的輸出(“身份”函數)。


作為一個非常簡單的示例,將人員列表映射到從名稱到人員的映射:


import static java.util.function.Function.identity


// [...]


List<Person> persons = ...

Map<String, Person> = persons.stream()

        .collect(Collectors.toMap(Person::name, identity()))

該identity()功能只是為了方便和可讀性。正如彼得在他的回答中指出的那樣,您可以只使用t -> t,但我個人認為使用identity()可以更好地傳達意圖,因為它沒有留下解釋的余地,例如懷疑原作者是否忘記在該 lambda 中進行轉換。我承認這是非常主觀的,并假設讀者知道是什么identity()。


可能它在內存方面可能有一些額外的優勢,因為它重用單個 lambda 定義,而不是為此調用具有特定的 lambda 定義。我認為在大多數情況下,這種影響可能可以忽略不計。


查看完整回答
反對 回復 2021-10-13
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

例如,您可以將其用于頻率計數。


public static <T> Map<T, Long> frequencyCount(Collection<T> words) {

    return words.stream()

            .collect(Collectors.groupingBy(Function.identity(),

                    Collectors.counting());

}

在這種情況下,您是說分組依據的關鍵是集合中的元素(不對其進行轉換)。


就個人而言,我覺得這個更簡短


import static java.util.stream.Collectors.*;


public static Map<String, Long> frequencyCount(Collection<String> words) {

    return words.stream()

            .collect(groupingBy(t -> t,

                    counting());

}


查看完整回答
反對 回復 2021-10-13
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

假設你有一個List<String> strings = List.of("abc", "de")和你想生成一個Map地方Key是價值形式的列表和價值是它的長度:


 Map<String, Integer> map = strings.stream() 

        .collect(Collectors.toMap(Function.identity(), String::length)) 

一般來說,有些人認為Function.identity()可讀性比例t -> t如低一點,但正如這里所解釋的,這有點不同。


查看完整回答
反對 回復 2021-10-13
  • 3 回答
  • 0 關注
  • 1073 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號