JavaにArrayListがあり、その中の特定のオブジェクトのすべてのオカレンスを見つける必要があります。メソッドArrayList.indexOf(Object)は1つのオカレンスを見つけるだけなので、別のものが必要なようです。
私はあなたがそれについて空想しすぎる必要はないと思います。以下は正常に動作するはずです。
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(ArrayList<T> list, T object) {
ArrayList<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
メソッドを使用して等しいかどうかをテストし、指定された引数の最初の出現を検索します。
これはこれに似ています answer 、代わりにstream
APIを使用します。
List<String> words = Arrays.asList("lorem","ipsum","lorem","amet","lorem");
String str = "lorem";
List<Integer> allIndexes =
IntStream.range(0, words.size()).boxed()
.filter(i -> words.get(i).equals(str))
.collect(Collectors.toList());
System.out.println(allIndexes); // [0,2,4]
すべての要素を反復処理し、ループを中断しないでください
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
}
}
お役に立てれば。