J'ai une ArrayList en Java et je dois y trouver toutes les occurrences d'un objet spécifique. La méthode ArrayList.indexOf (Object) ne trouve qu'une occurrence, il semble donc que j'ai besoin d'autre chose.
Je ne pense pas que vous ayez besoin d'être trop sophistiqué à ce sujet. Ce qui suit devrait bien fonctionner:
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;
}
Je suppose que vous devez obtenir tous les index de ArrayList où l’objet de cet emplacement est identique à l’objet donné.
La méthode suivante peut faire ce que vous voulez:
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;
}
Il recherche l'objet à l'aide de la méthode equals
et enregistre l'index de tableau actuel dans la liste des index. Vous faites référence à indexOf
dans votre question, qui utilise la méthode equals
pour tester l'égalité, comme indiqué dans la documentation Java:
Recherche la première occurrence de l'argument donné, teste l'égalité à l'aide de la méthode
equals
.
Ceci est similaire à ceci answer , utilise simplement 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]
itérer sur tous les éléments, ne pas casser la boucle
chaque élément de la ArrayList
se compare avec votre object
(arrayList.get(i).equals(yourObject)
)
s'il correspond, l'index (i) doit être stocké dans une ArrayList distincte (arraListMatchingIndexes).
Parfois, de cette manière, je fais un "tout retirer", quand j’ai aussi besoin des positions.
J'espère que ça aide!
Faire
for (int i=0; i<arrList.size(); i++){
if (arrList.get(i).equals(obj)){
// It's an occurance, add to another list
}
}
J'espère que cela t'aides.