2010-01-25 4 views
25

J'ai travaillé dessus et fermé avec Java/Python. Maintenant, dans cette situation, je veux vérifier si l'élément est dans la liste et faire des choses ...Un liner pour vérifier si l'élément est dans la liste

Python dit:

if "a" in ["a", "b", "c"]: 
    print "It's there!" 

-t-java fournir une doublure pour ce plutôt que de créer ArrayList/Set ou structure de données similaire par étapes et en y ajoutant des éléments?

Merci

Répondre

56

Utilisez Arrays.asList:

if(Arrays.asList("a","b","c").contains("a")) 
+2

Est-ce-que cela crée une liste? – danben

+2

La liste est juste une enveloppe autour du tableau, donc c'est très léger. Bien sûr, "contient" va juste finir par itérer à travers le tableau, alors quel est le point? –

+0

@danben bien sûr, mais c'est un one-liner approprié. –

7

Il y a un booléen contient la méthode (Object obj) dans l'interface de la liste.

Vous devriez pouvoir dire:

if (list.contains("a")) { 
    System.out.println("It's there"); 
} 

Selon le javadoc:

 
boolean contains(Object o)

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).

1

Vous pouvez utiliser java.util.Arrays.binarySearch pour trouver un élément dans un tableau ou pour vérifier son existence:

import java.util.Arrays; 
... 

char[] array = new char[] {'a', 'x', 'm'}; 
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) { 
    System.out.println("Yes, m is there"); 
} 

Sachez que pour que binarySearch fonctionne correctement, le tableau doit être trié. D'où l'appel à Arrays.sort() dans l'exemple. Si vos données sont déjà triées, vous n'avez pas besoin de le faire. Ainsi, ce n'est pas strictement un one-liner si vous avez besoin de trier votre tableau en premier. Malheureusement, Arrays.sort() ne renvoie pas de référence au tableau - il n'est donc pas possible de combiner sort et binarySearch (c'est-à-dire Arrays.binarySearch (Arrays.sort (myArray), key)) ne fonctionne pas).

Si vous pouvez vous permettre l'allocation supplémentaire, en utilisant Arrays.asList() semble plus propre.

0

S'il veut vraiment une seule ligne sans collections, OK, il peut avoir un:

for(String s:new String[]{"a", "b", "c")) if (s.equals("a")) System.out.println("It's there"); 

* sourire *

(est-il pas laid S'il vous plaît, ne l'utilisez pas en code réel)

2

Vous pouvez essayer d'utiliser des chaînes avec un séparateur qui n'apparaît dans aucun élément.

if ("|a|b|c|".contains("|a|")) 
7

En JDK7:

if ({"a", "b", "c"}.contains("a")) { 

En supposant que le projet collections Coin projet de littéraux traverse.

+0

Il est temps. J'espère que cela sera adopté. Je suis fatigué de la verbosité de Java – I82Much

+1

Les 13 caractères supplémentaires ne vous tueront probablement pas. –

Questions connexes