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

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

創建僅采用值作為參數的方法,該方法實現 Comparable<T>

創建僅采用值作為參數的方法,該方法實現 Comparable<T>

繁華開滿天機 2023-10-13 14:54:22
我想將重復代碼放入方法中,但找不到解決方案。該方法應該采用不同類型的類型,例如實現 Comparable 的String和Long,以便使用該compareTo()函數。原來的:Comparator<Pair<String, Long>> PAIR_COMPARATOR_FIRST =      (o1, o2) -> o1.getFirst() == null ? o2.getFirst() == null ? 0 : -1 : o2.getFirst() == null ? +1 : o1.getFirst().compareTo(o2.getFirst());Comparator<Pair<String, Long>> PAIR_COMPARATOR_SECOND =      (o1, o2) -> o1.getSecond() == null ? o2.getSecond() == null ? 0 : -1 : o2.getSecond() == null ? +1 : o1.getSecond().compareTo(o2.getSecond());我嘗試過:(不起作用)Comparator<Pair<String, Long>> PAIR_COMPARATOR_FIRST =(o1, o2) -> nullProfCompare(o1.getFirst(), o2.getFirst());Comparator<Pair<String, Long>> PAIR_COMPARATOR_SECOND =(o1, o2) -> nullProfCompare(o1.getSecond(), o2.getSecond());public static int nullProfCompare(Comparable<T> o1, T o2) {    return o1 == null ? o2 == null ? 0 : -1 : o2 == null ? +1 : o1.compareTo(o2);}我已經嘗試了很多類似使用instanceOf/isAssignableFrom但沒有任何效果。該方法應該如何只接受實現 Comparable 的變量?
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

Java 8 已經具有支持 null 的Comparator實現:

  • Comparator.nullsFirst(Comparator<? super T> comparator)

  • Comparator.nullsLast(Comparator<? super T> comparator)

看來你的方法nullProfCompare是一樣的nullsFirst。

您還可以使用該Comparator.comparing(Function<? super T,? extends U> keyExtractor)方法來簡化您的代碼:

Comparator<Pair<String,?Long>>?PAIR_COMPARATOR_FIRST?=
????????Comparator.nullsFirst(Comparator.comparing(Pair::getFirst));
Comparator<Pair<String,?Long>>?PAIR_COMPARATOR_SECOND?=
????????Comparator.nullsFirst(Comparator.comparing(Pair::getSecond));

您的實現的問題nullProfCompare在于您在使用時T沒有定義它,并且您的兩個參數不是同一類型,而它們應該是同一類型。

這是正確的實現:

public?static?<T?extends?Comparable<T>>?int?nullProfCompare(T?o1,?T?o2)?{
????return?o1?==?null???o2?==?null???0?:?-1?:?o2?==?null???+1?:?o1.compareTo(o2);
}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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