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

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

如何將 Java 供應商綁定到對象的實例?

如何將 Java 供應商綁定到對象的實例?

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

3 回答

?
牛魔王的故事

TA貢獻1830條經(jīng)驗 獲得超3個贊

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


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


查看完整回答
反對 回復 2021-11-03
?
慕仙森

TA貢獻1827條經(jīng)驗 獲得超8個贊

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


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

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

}

接口必須是Function 而不是Supplier 的原因是,只有Function 等價于使用對象并調用對象上的引用方法的lambda 表達式。


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


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

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


(instance) -> instance.referencedMethod()

附加信息:


編輯:我知道我可以通過使用 Comparator 來做同樣的事情,但這個例子非常簡化。在我的應用程序中,這種功能是必要的。我必須創(chuàng)建一個 compareTo 函數(shù),該函數(shù)按多個屬性對 ArrayList 進行排序,因為主要排序屬性在列表中可能不是唯一的。我想與您分享我的代碼,因為我認為這對您來說可能是一個有趣的見解。


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;

}

例如,您可以按姓氏對人員列表進行排序,如果其中兩個相同,則可以使用名字進行排序。使用此解決方案,您可以在運行時更改排序。


查看完整回答
反對 回復 2021-11-03
?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

實際上,定義方法的更正確方法是:


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);

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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