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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將 Java 供應(yīng)商綁定到對(duì)象的實(shí)例?

如何將 Java 供應(yīng)商綁定到對(duì)象的實(shí)例?

慕尼黑8549860 2021-11-03 10:59:24
如何將 Java 綁定Supplier到對(duì)象的現(xiàn)有實(shí)例?例如,如果我想compareTo()使用此標(biāo)頭編寫自己的方法:public static int myCompareTo(Object o1, Object o2, Supplier<Comparable> supplier) {...}我希望能夠這樣稱呼它:myCompareTo("Hello", "Hello2", String::length);其中String(大寫字母)是一個(gè)類,沒有對(duì)象。那么如何將實(shí)例綁定o1到供應(yīng)商呢?
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是您正在尋找的內(nèi)容(我相信):


public static <T, U extends Comparable<U>> int compare(T o1, T o2, Function<T, U> mapper) {

    return mapper.apply(o1).compareTo(mapper.apply(o2));

}

你可以這樣稱呼它:


compare("str1", "str2", String::length); // 0


查看完整回答
反對(duì) 回復(fù) 2021-11-03
?
慕仙森

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

感謝您的回答。其實(shí)我現(xiàn)在想通了。我想要提供的對(duì)象實(shí)例(o1 和 o2)來執(zhí)行給定的方法。我發(fā)現(xiàn)供應(yīng)商是錯(cuò)誤的接口,而我不得不使用函數(shù)。在這里你可以看到我的工作簡(jiǎn)化示例:


public static <T> int myCompareTo(T o1, T o2, Function<T, Comparable> getter) {

        return getter.apply(o1).compareTo(getter.apply(o2));

}

接口必須是Function 而不是Supplier 的原因是,只有Function 等價(jià)于使用對(duì)象并調(diào)用對(duì)象上的引用方法的lambda 表達(dá)式。


例如,如果您將方法引用定義為:


Function<TypeOfInstance, ReturnTypeOfReferencedMethod> methodReference = TypeOfInstance::referencedMethod();

那么正在執(zhí)行的等效 lambda 表達(dá)式是:


(instance) -> instance.referencedMethod()

附加信息:


編輯:我知道我可以通過使用 Comparator 來做同樣的事情,但這個(gè)例子非常簡(jiǎn)化。在我的應(yīng)用程序中,這種功能是必要的。我必須創(chuàng)建一個(gè) compareTo 函數(shù),該函數(shù)按多個(gè)屬性對(duì) ArrayList 進(jìn)行排序,因?yàn)橹饕判驅(qū)傩栽诹斜碇锌赡懿皇俏ㄒ坏摹N蚁肱c您分享我的代碼,因?yàn)槲艺J(rèn)為這對(duì)您來說可能是一個(gè)有趣的見解。


public static <T> int ultimateCompare(T o1, T o2, Function<T, Comparable>... getters) {

    for (Function<T, Comparable> getter : getters) {

        int result = getter.apply(o1).compareTo(getter.apply(o2));

        if (result != 0) return result;

    }

    return 0;

}

例如,您可以按姓氏對(duì)人員列表進(jìn)行排序,如果其中兩個(gè)相同,則可以使用名字進(jìn)行排序。使用此解決方案,您可以在運(yùn)行時(shí)更改排序。


查看完整回答
反對(duì) 回復(fù) 2021-11-03
?
飲歌長(zhǎng)嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

實(shí)際上,定義方法的更正確方法是:


private static <T, U extends Comparable<? super U>> int myCompareTo(T left, T right, Function<T, U> fu) {

    return Comparator.comparing(fu).compare(left, right);

}


查看完整回答
反對(duì) 回復(fù) 2021-11-03
  • 3 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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