web-dev-qa-db-fra.com

Java, vérification simplifiée si int array contient int

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.

72
Caleb

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);
}
52
Reimeus

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.

29
Tomasz Nurkiewicz

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. 

Voir Les primitifs de goyave expliqués

17
Evert

Voici la solution Java 8

public static boolean contains(final int[] arr, final int key) {
    return Arrays.stream(arr).anyMatch(i -> i == key);
}
17
TriCore

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)

15
Cratylus

Je sais que c'est très tardif, mais essayez Integer[] au lieu de int[].

12
Willy Wonka

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

3
Rameez

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(...)
0
Jaskey

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);
0
Mourad El Aomari

cela a fonctionné en Java 8

public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
0
Farhad Baghirov

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);
0
Hetal Rachh

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); 
}
0
Elavarasan S