実質的な解決策 比較方式は一般契約に違反する!?
今日、あるプロジェクトで、時々ソートしてエラーを報告するものに遭遇しました。
List<Integer> collect = Arrays.asList( array ).stream().sort( (h1, h2) -> (h1).compareTo( h2 ) >= 0 ? 1 : -1 ).collect( Collectors.toList() );
JDK7でのソートメソッドの実装では、compareメソッドは2つの値が等しい場合に0を返す必要があり、そうでない場合はソート時にエラーを投げることがありますが、JDK6にはこの制限はありません。
ここで、Web上で公開されている解決策は
3.ソリューション
問題を解決する方法は少なくとも3つあります。
(1) JDKバージョン1.6で実行する。
(2) The ONE のソースコードを修正し、通過性を確保する
ルータのコンパレータComparatorを変更するだけです。例えば、MaxPropComparatorをMaxPropに変更します。
private class MaxPropComparator implements Comparator {...
...
}
(3) ソースコードの再コンパイル
JDK1.6+で適切に動作するように、The ONEソースコードを再コンパイルするためのオプションをいくつか追加します[1]。
方法1:main関数の1行目に以下のコードを追加します。
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true") を設定します。
方法2:オプション -Djava.util.Arrays.useLegacyMergeSort=true でコンパイルすると、完全なJavaコンパイルは次のようになります。
java -Djava.util.Arrays.useLegacyMergeSort=true -d64 -Xms512m -Xmx4g -cp . :lib/ECLA.jar:lib/DTNConsoleConnection.jar core.DTNSim $*.net
私の解決策
1. compareメソッドがオーバーライドされた場合、greater than, less than, equal toを判断する必要があることもネットで紹介されています。
---------- -----
2. java の compareTo() メソッドを使用し、jdk に処理させる。
listRs = list.stream().sort((n1, n2) -> {
BigDecimal value1 = n1.getValue1();
BigDecimal value2 = n2.getValue1();
// reverse order, so multiply by -1
return -1 * value1.compareTo(value2);
}).collect(Collectors.toList());
参考
https://blog.csdn.net/sinat_29970905/article/details/82385630
関連
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
javaでクラスを作成すると、enclosing classでないように見える
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
Java静的コード解析 - 仕様チェック - checkstyle
-
IDEAがGitHubに接続し、認証情報が正しくない401、インバリダの認証データの問題を解決する。
-
問題を自動的に選択して回答し、その時間を自動的に修正するスクリプト
-
Gradleプロジェクトを作成すると、Could not install Gradle distribution from 'https://services.gradle.org/distributions/gr...と表示される。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
テストが見つかりませんでした
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
SyntaxError: JSON入力の予期せぬ終了 解決策とアイデア
-
Java言語プログラミング(基礎編)(第10版)練習問題解答編 第6章
-
Swagger の @ApiModelProperty オブジェクト フィールドが表示されない
-
Tomcat 8は、「少なくとも1つのJARがTLDをスキャンされたが、TLDが含まれていない」問題を解決します。
-
ApiModelPropertyアノテーションの使用方法
-
Java ソート例外 比較メソッドの一般契約違反
-
ターゲットランタイムのApache Tomcat v7.0が定義されていない解決策