En gros, mon collègue a dit que je pouvais raccourcir mon code en utilisant une méthode différente pour vérifier si un tableau int contient un int, bien qu'il ne me dise pas ce que c'est:.
Actuel:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
J'ai aussi essayé cela, même si cela retourne toujours faux pour une raison quelconque.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Quelqu'un pourrait m'aider?
Je vous remercie.
Vous pouvez simplement utiliser ArrayUtils.contains
from Apache Commons Lang library
.
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
C'est parce que Arrays.asList(array)
renvoie List<int[]>
. L'argument array
est traité comme une valeur que vous voulez encapsuler (vous obtenez la liste des tableaux d'ints), pas comme vararg.
Notez que fonctionne avec des types d'objet (pas des primitives):
public boolean contains(final String[] array, final String key) {
return Arrays.asList(array).contains(key);
}
ou même:
public <T> boolean contains(final T[] array, final T key) {
return Arrays.asList(array).contains(key);
}
Mais vous ne pouvez pas avoir List<int>
et l'autoboxing ne fonctionne pas ici.
Guava propose des méthodes supplémentaires pour les types primitifs. Parmi eux, une méthode contient qui prend les mêmes arguments que le vôtre.
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
Vous pouvez aussi importer de manière statique la version goyave.
Voici la solution Java 8
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
Une manière différente:
public boolean contains(final int[] array, final int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
Cela modifie le tableau transmis. Vous auriez la possibilité de copier le tableau et d’utiliser le tableau d’origine, à savoir int[] sorted = array.clone();
Mais ce n’est qu’un exemple de code abrégé. Le runtime est O(NlogN)
alors que votre chemin est O(N)
Je sais que c'est très tardif, mais essayez Integer[]
au lieu de int[]
.
Si le tableau est un entier, double ou long, nous pouvons utiliser respectivement ces IntStream, DoubleStream ou LongStream
int[] values = { 1, 33, 55, 66 };
int testValue = 33;
boolean contains = IntStream.of(values).anyMatch(x -> x == testValue);
Référence- Vérification d'une valeur dans Array
1. une des utilisations
List<T> list=Arrays.asList(...)
list.contains(...)
2. Utilisez HashSet pour évaluer les performances si vous utilisez plusieurs fois.
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
Vous pouvez utiliser la classe Java.util.Arrays
pour transformer le tableau T[?]
en un objet List<T>
avec des méthodes telles que contains
:
Arrays.asList(int[] array).contains(int key);
cela a fonctionné en Java 8
public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
Vous pouvez convertir votre tableau int primitif en un arraylist of Integers en utilisant le code Java 8 ci-dessous,
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
Et puis utilisez la méthode contains()
pour vérifier si la liste contient un élément particulier,
boolean containsElement = arrayElementsList.contains(key);
Essaye ça:
public static void arrayContains(){
int myArray[]={2,2,5,4,8};
int length=myArray.length;
int toFind = 5;
boolean found = false;
for(int i = 0; i < length; i++) {
if(myArray[i]==toFind) {
found=true;
}
}
System.out.println(myArray.length);
System.out.println(found);
}