Java に ArrayList があり、特定のオブジェクトのすべての出現箇所を見つける必要があります。メソッド ArrayList.indexOf(Object) は 1 つのオカレンスを見つけるだけなので、別の何かが必要なようです。
6 に答える
私はあなたがそれについてあまり空想する必要はないと思います。以下は正常に機能するはずです。
static <T> List<Integer> indexOfAll(T obj, List<T> list) {
final List<Integer> indexList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (obj.equals(list.get(i))) {
indexList.add(i);
}
}
return indexList;
}
そのスロットのオブジェクトが指定されたオブジェクトと同じである ArrayList のすべてのインデックスを取得する必要があると思います。
次のメソッドは、あなたがやりたいことをするかもしれません:
public static <T> int[] indexOfMultiple(List<T> list, T object) {
List<Integer> indices = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(object)) {
indices.add(i);
}
}
// ArrayList<Integer> to int[] conversion
int[] result = new int[indices.size()];
for (int i = 0; i < indices.size(); i++) {
result[i] = indices.get(i);
}
return result;
}
メソッドを使用してオブジェクトを検索しequals
、現在の配列インデックスをインデックス付きリストに保存します。Javaのドキュメントで述べられているように、メソッドを使用して同等性をテストindexOf
する質問で言及しています。equals
メソッドを使用して等しいかどうかをテストし、指定された引数の最初の出現を検索し
equals
ます。
アップデート
Java 8 ストリームを使用すると、はるかに簡単になります。
public static <T> int[] indexOfMultiple(List<T> list, T object) {
return IntStream.range(0, list.size())
.filter(i -> Objects.equals(object, list.get(i)))
.toArray();
}
すべての要素を繰り返し、ループを壊さないでください
あなたの()ArrayList
と比較の各要素object
arrayList.get(i).equals(yourObject)
インデックス ( i ) よりも一致する場合は、別の ArrayList (arraListMatchingIndexes) に格納する必要があります。
ポジションも必要な場合は、この方法で「すべて削除」することがあります。
それが役立つことを願っています!
行う
for (int i=0; i<arrList.size(); i++){
if (arrList.get(i).equals(obj)){
// It's an occurance, add to another list
}
}
お役に立てれば。