問題タブ [compareto]
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.
.net - CompareTo を使用した .Net Version インスタンスの比較が期待どおりに機能しない
.Net の Version クラスは、予想どおり CompareTo インターフェイスを実装していません。4 つの数値を比較するのではなく、英数字で比較を処理しているようです。たぶんバグではなく、「機能」です。
以下で期待するように、比較(および標準の <、=、および > 演算子)が機能しない理由を誰でも明らかにできますか?
私は人々がこれに対して独自の手動の回避策を行ったことを知っています.
前もって感謝します
ライアン
更新:私は微妙にばかげたことをしていて、それらをIPアドレスと同じように扱っていました. 例えば; 1.1.3023.5364 は 1.1.5 より大きいが、1.1.3023.5364 は 1.1.5000 より小さい。
java - nullセーフなcompareTo()実装を簡素化するには?
compareTo()
このような単純なクラスのメソッドを実装しています ( Collections.sort()
Java プラットフォームによって提供されるその他の機能を使用できるようにするため):
これらのオブジェクトの自然な順序付けを次のようにしたいと考えています。1) 名前で並べ替え、2) 名前が同じ場合は値で並べ替えます。どちらの比較も大文字と小文字を区別しない必要があります。両方のフィールドで null 値は完全に許容されるためcompareTo
、これらのケースで壊れてはなりません。
頭に浮かぶ解決策は、次のようなものです (ここでは「ガード句」を使用していますが、他の人は単一のリターン ポイントを好むかもしれませんが、それは重要ではありません)。
これでうまくいきますが、私はこのコードに完全に満足しているわけではありません。確かにそれほど複雑ではありませんが、非常に冗長で退屈です。
問題は、(機能を維持しながら)どのようにこれを冗長にしないかということです。役立つ場合は、Java 標準ライブラリまたは Apache Commons を自由に参照してください。これを(少し)簡単にする唯一のオプションは、独自の「NullSafeStringComparator」を実装し、それを両方のフィールドの比較に適用することでしょうか?
編集 1-3 : Eddie の権利。上記の「両方の名前が null」の場合を修正
採用された回答について
もちろん、2009年にJava 1.6でこの質問をしましたが、当時、Eddieによる純粋なJDKソリューションが私の好みの受け入れられた回答でした。私は今まで(2017年)それを変えようとはしませんでした。
2009 Apache Commons Collections のものと 2013 Guava のもので、どちらも私が投稿したサードパーティのライブラリ ソリューションもあります。
私は今、Lukasz Wiktor によるクリーンなJava 8 ソリューションを受け入れられた答えにしました。Java 8 を使用している場合は、これが確実に優先されます。最近では、ほぼすべてのプロジェクトで Java 8 を使用できるはずです。
java - javaのEnum finalにcompareToがあるのはなぜですか?
Java の列挙型は、Comparable
インターフェイスを実装します。Comparable
のメソッドをオーバーライドすればよかったのですcompareTo
が、ここでは final とマークされています。Enum
のデフォルトの自然順序compareTo
は、リストされた順序です。
Java列挙型にこの制限がある理由を知っている人はいますか?
java - Java では、最初に最大の要素を返す PriorityQueue に何を使用すればよいですか?
Java のPriorityQueueは最小の要素をリストの先頭に配置しますが、最大の要素を先頭に配置する必要があります。そのように動作する優先キューを取得する最も適切な方法は何ですか。
このキューに格納されたクラスを作成したので、このキューのcompareTo
外では使用されず、 の結果を単純に逆にすることができました。
しかし、私がモデリングしているものをコードで正確に表現したいのですが、私がやろうとしているのは、最初に最大のものを取得することです.
[編集] 皆さん、どうもありがとうございました。 Comparator は、自分で書き方を学ぶとすぐに必要なもののように聞こえます。
java - 文字列および整数引数のJavacompareTo
私はバブルソートアルゴリズムを実装していて、パラメータの両方を受け入れることができるようにしたいと思っていInteger
ますString
。すべての入力を文字列としてキャストし、このcompareTo
メソッドを使用して、文字列としてキャストされた整数を文字列と比較します。compareTo
キャストされた整数を比較するために使用すると、間違った答えが返されます。私は何が間違っているのですか?
java - JavaのcompareToメソッドの実用的なアプリケーションは何ですか?
私が学んでいるJavaの教科書では、これは「辞書式順序」を使用して整数を返すと書かれています。私はそれがどのように機能するかを理解していますが、これがプログラミングで使用される特定の方法は何ですか?
java - compareTo()とequals()
Javaでの等しいかどうかをテストするときString
、私はいつもequals()
これを使用しました。なぜなら、これが最も自然な方法のように思われるからです。結局のところ、その名前はすでにそれが何をしようとしているのかを示しています。しかし、私の同僚は最近、のcompareTo() == 0
代わりに使用するように教えられたと私に言いましたequals()
。これは不自然に感じ(compareTo()
順序付けを提供し、平等を比較しないことを意味します)、多少危険です(compareTo() == 0
すべての場合に平等を意味するわけではありませんが、私はそれが平等であることを知っていますがString
)。
彼はなぜ彼がのcompareTo()
代わりにequals()
使うように教えられたのか知りませんでしたString
、そして私もその理由を見つけることができませんでした。これは本当に個人的な好みの問題ですか、それともどちらの方法にも本当の理由がありますか?
java - Node と Object を BST データ構造と比較する
「java.lang.string をノードにキャストできません」という例外が発生します。提供された toString メソッドを使用して localRoot を文字列に変換し、それらを比較することを考えましたが、BST をナビゲートするために必要な「より大きい」または「より小さい」という概念はありません...
ここで、o は Object 型です localRoot は Node 型です compareTo メソッドは Node を取ります
c# - C#でのSQLバイナリ相対値テストに相当
私はこのSQLに相当するC#を見つけようとしています:
これと同じですか?
そうでない場合、どうすればそれをシミュレートできますか?