同じクラスのインスタンスまたは と比較できるクラスを作成しようとしていますString
。
たとえば、次のことを考慮してください。
public class Record implements Comparable<Record> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
}
次に、これをArrayList
次のように配置します。
ArrayList<Record> records = new ArrayList<Record>();
records.add(new Record("3"));
records.add(new Record("1"));
records.add(new Record("2"));
次にそれらを並べ替えると、適切に並べ替えられます。
Collections.sort(records);
ただし、文字列に基づいてバイナリ検索を介してレコードを取得できるようにしたくありません。例えば:
int index = Collections.binarySearch(records, "3");
問題はcompareTo
、文字列を引数として取るメソッドがなく、それを実装する方法がわからないことです。
私はやってみました:
public class Record implements Comparable<Record>, Comparable<String> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
public int compareTo(String o) {
return name.compareTo(o);
}
}
しかし、もちろん、異なる引数で同じインターフェースを複数回実装することはできません。
そこで、上記の方法を探しています。以下の以前の回答を見てきましたが、本当にこれに十分に答えているものは見つかりませんでした。少なくとも、もしそうなら、私はそれを理解していませんでした。
- スキャナーを使用した compareTo と文字列
- Java のさまざまなデータ メンバーに基づくオブジェクトのリストの並べ替え
- 私が今リンクを持っていない他のたくさんの...
基本的に、私がやりたいことは次のとおりです。
public int compare(Record r, String s) {
return r.name.compareTo(s);
}
ただし、私が知る限り、何らかの共通のインターフェイスまたはスーパークラスを実装しないと、異なる型のオブジェクトを比較することはできません。私は本当にそのオプションを持っていませんString
。
可能であれば、誰かがこれを行う方法を教えてもらえますか? ありがとう。
更新 次のことができることを認識しています。
Collections.binarySearch(records, new Record("3"));
しかし、それは私が求めているものではありません。ありがとう。