比較方式がその一般契約に違反している。
2022-02-21 04:43:58
java.lang.IllegalArgumentException: 比較メソッドが一般契約に違反しています!
at java.util.TimSort.mergeLo(TimSort.java:777)
at java.util.TimSort.mergeAt(TimSort.java:514)
at java.util.TimSort.mergeCollapse(TimSort.java:439)
java.util.TimSort.sort(TimSort.java:245)にて。
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
ソートのバグがあるので調べてみたら、結構高度なことをやっているんですね。
並べ替えたい対象は、対称性、移譲性、自己再帰性を満たすように提案する必要があると書いてあります。正直なところ、それが何なのかわからないんです。 <スパン 問題をどう解決するかが気になる。
私の当初の注文はこのように書かれていました。
/**
* Asynchronous transactions are sorted by creation time in descending order
*/
Ordering<AdaptiveTrace> ADAPTIVE_TRACE_DESC_ORDERING = new Ordering<AdaptiveTrace>() {
@Override
public int compare(AdaptiveTrace left, AdaptiveTrace right) {
if (left == null || left.getCreateAt() == null) {
return 1;
}
if (right == null || right.getCreateAt() == null) {
return -1;
}
return right.getCreateAt().compareTo(left.getCreateAt());
}
};
すると、このコードでエラーが報告されます。このデータで同時にヌルヌルを取得しているからだそうです。
次に、これを修正する方法をご覧ください。
/**
* Alias scheme in descending order of creation
*/
Ordering<AliasScheme> ALIAS_SCHEME_DESC_ORDERING = new Ordering<AliasScheme>() {
@Override
public int compare(AliasScheme left, AliasScheme right) {
if (left == null && right == null) {
return 0;
}
if (left == null) {
return 1;
}
if (right == null) {
return -1;
}
if (left.getCreateAt() == null && right.getCreateAt() == null) {
return 0;
}
if (left.getCreateAt() == null) {
return 1;
}
if (right.getCreateAt() == null) {
return -1;
}
return right.getCreateAt().compareTo(left.getCreateAt());
}
};
ほら、今回は判定がいい。
では、仕分けはOKなんですね。
そして、ソート・インターフェースが呼び出されるコードは次のようになります。
List<AliasScheme> aliasSchemes = Lists.newArrayList(aliasSchemeRepository.findAll());
aliasSchemes.sort(OrderingConstants.ALIAS_SCHEME_DESC_ORDERING);
そして、完成です。
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
final, finally, finalizeの違いについて話してください。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
linux run jarfile Invalid or corrupt jarfile error.
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
コンピュータ教育で足りない授業、手遅れになる前に補うようにアドバイス、仕事の後の半分の努力で2倍の結果が得られる!?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
SpringBootApplication を型解決できない。
-
プロジェクトの依存関係を解決できなかった 解決
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
java 例外。Javaツールの初期化
-
Java静的コード解析 - 仕様チェック - checkstyle
-
Android TextViewの行間解析