タグ付けされた質問 「comparator」

28
カスタムオブジェクトのArrayListをプロパティで並べ替え
私はコンパレータを使用してArrayListsをソートすることについて読みましたが、すべての例で人々が使用compareToしたものは、いくつかの調査によると文字列のメソッドです。 カスタムオブジェクトのArrayListを、プロパティの1つであるDateオブジェクト(getStartDay())で並べ替えたいと考えました。通常私はそれらを比較するitem1.getStartDate().before(item2.getStartDate())ので、私は次のようなものを書くことができるかどうか疑問に思っていました: public class CustomComparator { public boolean compare(Object object1, Object object2) { return object1.getStartDate().before(object2.getStartDate()); } } public class RandomName { ... Collections.sort(Database.arrayList, new CustomComparator); ... }
1145 java  sorting  date  comparator 


14
Javaでコンパレータを使用してソートする方法
比較ツールの使用方法を学びましたが、比較ツールに問題があります。私のコードにエラーがあります: Exception in thread "main" java.lang.ClassCastException: New.People cannot be cast to java.lang.Comparable at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at java.util.Collections.sort(Unknown Source) at New.TestPeople.main(TestPeople.java:18) これが私のコードです: import java.util.Comparator; public class People implements Comparator { private int id; private String info; private double price; public People(int newid, String newinfo, double newprice) { setid(newid); …
169 java  sorting  comparator 


12
Android-java-オブジェクトのリストをオブジェクト内の特定の値でソートする方法
オブジェクト内の特定の値でオブジェクトの配列リストをソートしようとしています。そのようなことをするための最良のアプローチは何でしょうか。ある種のコンパレータでCollections.sort()を使用する必要がありますか? オブジェクトのリストを、変数の1つに保持されているfloat値でソートしようとしています。 編集:これは私がこれまでに持っているものです: public class CustomComparator implements Comparator<Marker> { @Override public int compare(Mark o1, Mark o2) { return o1.getDistance().compareTo(o2.getDistance()); } } エラー状態:プリミティブ型doubleでcompareTo(double)を呼び出せません。 それはコンパレータが特定のタイプ以外のものを返すことができないからですか?

19
ComparableおよびComparatorを使用する場合
私はフィールドでソートする必要があるオブジェクトのリストを持っています、例えばスコア。あまり考えずに、Comparatorを実装する新しいクラスを作成しました。このクラスは、タスクを実行して機能します。 これを振り返ると、Comparatorを実装する新しいクラスを作成するのではなく、代わりにmyクラスにComparableを実装させる必要があるのか​​と思います。スコアは、オブジェクトが注文される唯一のフィールドです。 練習として許容できることは何ですか? 「最初にクラスにComparableを実装させて(自然順序付けのため)、代替のフィールド比較が必要な場合は、Comparatorを実装する新しいクラスを作成する」という正しいアプローチですか? 上記の(2)がtrueの場合、クラスにComparableを実装させた後でのみコンパレータを実装する必要があるということですか?(私が元のクラスを所有していると仮定します)。

9
Javascriptのsort()はどのように機能しますか?
次のコードは、この配列を番号順に並べ替える方法を教えてください。 var array=[25, 8, 7, 41] array.sort(function(a,b){ return a - b }) 計算の結果が... 0未満:「a」は「b」よりも低いインデックスになるようにソートされます。 ゼロ:「a」と「b」は等しいと見なされ、ソートは実行されません。 0より大きい:「b」は「a」よりも低いインデックスになるようにソートされます。 配列ソートコールバック関数は、ソート中に何度も呼び出されますか? もしそうなら、毎回どの2つの数値が関数に渡されるのか知りたいです。最初に「25」(a)と「8」(b)、次に「7」(a)と「41」(b)が必要だと思いました。 25(a)-8(b)= 17(ゼロより大きいため、「b」を「a」よりも低いインデックスに並べ替えます):8、25 7(a)-41(b)= -34(ゼロ未満なので、「a」を「b」よりも低いインデックスに並べ替えます:7、41 次に、2つの数値セットはどのように相互に関連してソートされますか? 苦労している初心者を助けてください!

10
Javaエラー:比較メソッドが一般契約に違反しています
私はこれについて多くの質問を見て問題を解決しようとしましたが、1時間のグーグルと多くの試行錯誤の後、私はまだそれを修正することができません。私はあなたの何人かが問題を捕まえることを望みます。 これは私が得るものです: java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835) at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453) at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:392) at java.util.ComparableTimSort.sort(ComparableTimSort.java:191) at java.util.ComparableTimSort.sort(ComparableTimSort.java:146) at java.util.Arrays.sort(Arrays.java:472) at java.util.Collections.sort(Collections.java:155) ... そしてこれは私のコンパレータです: @Override public int compareTo(Object o) { if(this == o){ return 0; } CollectionItem item = (CollectionItem) o; Card card1 = CardCache.getInstance().getCard(cardId); Card card2 = CardCache.getInstance().getCard(item.getCardId()); …

4
Java8コンパレータ型推論によって非常に混乱している
特に静的メソッドの使用と、ラムダ式でparamタイプが必要かどうかに関して、Collections.sortとの違いを調べてきました。始める前に、たとえば問題を克服するためにメソッド参照を使用できることはわかっていますが、ここでのクエリは修正したいものではなく、答えが必要なものです。つまり、Javaコンパイラがこのように処理するのはなぜですか。 。list.sortComparatorSong::getTitle これらは私の発見です。我々が持っていると仮定しArrayListたタイプのをSong追加いくつかの曲で、3つの標準getメソッドがあります: ArrayList<Song> playlist1 = new ArrayList<Song>(); //add some new Song objects playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") ); playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") ); playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") ); これは、機能する両方のタイプのソートメソッドの呼び出しです。問題ありません。 Collections.sort(playlist1, Comparator.comparing(p1 -> p1.getTitle())); playlist1.sort( Comparator.comparing(p1 -> p1.getTitle())); チェーンを開始するとすぐthenComparingに、次のことが起こります。 Collections.sort(playlist1, …

1
カスタムコンパレーターを使用してTreeSetから削除しないと、より大きな項目のセットが削除されないのはなぜですか?
Java 8とJava 11の両方を使用TreeSetして、String::compareToIgnoreCaseコンパレーターで以下を検討してください。 final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] に存在する正確な要素を削除しようとすると、TreeSet機能します。指定された要素はすべて削除されます。 languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] ただし、に存在する以上のものを削除しようとするTreeSetと、呼び出しは何も削除しません(これは後続の呼び出しではなく、上のスニペットの代わりに呼び出されます)。 languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] 何が悪いのですか?なぜこのように動作するのですか? 編集:String::compareToIgnoreCaseは有効なコンパレータです: (l, r) -> l.compareToIgnoreCase(r)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.