問題タブ [comparisonchain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
14145 参照

java - Objects.equal() && Objects.equal() ... と Guava でなくても ComparisonChain を使用する利点は何ですか?

Google の Guava コレクション ( ComparisonChainObjects ) を使い始めたところです。私のpojoでは、equalsメソッドをオーバーライドしているので、最初にこれを行いました:

ただし、これも使用できることに気付きました。

また、次のような条件を簡単に追加できるため、比較チェーンがいつ改善されるかわかりません。

特にintを返す必要がある場合に私が見ることができる唯一の利点。これには 2 つの追加のメソッド呼び出し (開始と結果) があり、noob にとってはより複雑です。

私が見逃しているComparisonChainの明白な利点はありますか?

(はい、適切な でハッシュコードをオーバーライドしていますObjects.hashcode())

0 投票する
1 に答える
4317 参照

java - Guava の ComparisonChain を使用してローマ数字を含む文字列を比較する

Comparator<String>最初の単語がローマ数字である文字列がローマ数字で始まらない文字列の前にあるように文字列をソートするクラスを実装しています。両方の文字列がローマ字リテラルで始まる場合は、次の 2 つのケースがあります。

  1. ローマ数字でソートし、等しい場合は残りの文字列でソートします
  2. 文字列の残りの部分で並べ替え、ローマ数字と等しい場合

Guava のComparisonChainを使用したかったのですが、2 つの問題が発生しました。

  1. Eclipse でのデバッグ中、ComparisonChain オブジェクトの中身がわかりません (ComparisonChain クラスにいても)。
  2. comparisonChain.result()上記の 2 番目の例では、「XI サムシング」、「III サムシング」などの値に対して常に 0 を返します (問題 #1 のため、フローを検査できません) (long への変換は問題ありません - 値を確認しました)。

ここで何が問題なのですか?上記のようにオブジェクトを使用できますcomparisonChain(変数を作成.compareし、ビルダーのようにいくつかの if に s を追加することにより)、できませんか?

このコード:

この:

異なる結果が得られます - 最初のケースは問題ありませんが、2 番目のケースは常に 0 です。質問は、2 番目のケースの場合、示されているように使用できますComparisonChainか、それともこの動作はバグですか?

0 投票する
1 に答える
4254 参照

java - Guava の ComparisonChain を使用して null フィールドを特別な方法で処理できますか?

複数のフィールドを持つ ComplexObject があり、これを言いたい:

  • x両方にフィー​​ルドが存在する場合compareは、比較チェーンの次のフィールドに進みます。
  • 両方が null の場合はcompare、比較チェーンの次のチェーンに進みます。
  • 一方が null で、もう一方がそうでない場合は、最後に null を配置します

私が知る限り、これを行う方法がわかりません

意思

  1. オブジェクトが両方とも存在し、等しい場合、それらは等しいと見なします
  2. オブジェクトが両方とも null の場合、それらは等しいと見なされます。

グアバComparisonChainまたはOrderingクラスを使用して目的を達成する方法はありますか? または、この問題を解決することを考えるより良い方法はありますか?

0 投票する
2 に答える
785 参照

java - Guava ComparisonChainは、最初の比較がゼロ以外の結果を返した後に終了しないのはなぜですか?

グアバの比較チェーンは、比較を遅延して評価することになっていませんか? 以下のコードでは、NullComparator (apache) はゼロ以外の値を返しますが、チェーンは終了しませんか?

docsから: ComparisonChain 実装は、入力の compareTo および compare メソッドの呼び出しを停止し、そのうちの 1 つがゼロ以外の結果を返すとすぐに停止します。

注: 上記は単なる例です。多分これはより良い例でしょう