Java: Obtenir le premier élément d’une collection

Si j’ai une collection, telle que Collection strs , comment puis-je extraire le premier élément? Je pourrais juste appeler un Iterator , prendre son premier next() , puis jeter l’ Iterator . Y a-t-il un moyen moins coûteux de le faire?

Iterables.get (yourC, indexYouWant)

Parce que vraiment, si vous utilisez Collections, vous devriez utiliser Google Collections.

On dirait que c’est la meilleure façon de le faire:

 Ssortingng first = strs.iterator().next(); 

Bonne question … Au début, cela semble être un oubli pour l’interface Collection .

Notez que “first” ne renverra pas toujours la première chose que vous avez mise dans la collection, et peut uniquement avoir un sens pour les collections ordonnées. Peut-être que c’est la raison pour laquelle il n’y a pas d’appel get(item) , puisque la commande n’est pas nécessairement conservée.

Bien que cela puisse sembler un peu inutile, cela pourrait ne pas être aussi grave que vous le pensez. L’ Iterator ne contient que des informations d’indexation dans la collection, et n’est généralement pas une copie de la collection entière. L’invocation de cette méthode instancie l’object Iterator , mais c’est vraiment la seule surcharge (pas comme la copie de tous les éléments).

Par exemple, en regardant le type renvoyé par la méthode ArrayList.iterator() , nous voyons que c’est la méthode ArrayList::Itr . C’est une classe interne qui accède directement aux éléments de la liste, plutôt que de les copier.

En java 8:

 Optional firstElement = collection.stream().findFirst(); 

Pour les anciennes versions de Java, il existe une méthode getFirst dans Guava Iterables :

 Iterables.getFirst(iterable, defaultValue) 

Il n’y a pas de “premier” article dans une Collection parce que c’est bien une collection.

A partir de la méthode Collection.iterator () de Java doc:

Il n’y a aucune garantie concernant l’ordre dans lequel les éléments sont retournés …

Donc vous ne pouvez pas.

Si vous utilisez une autre interface telle que Liste , vous pouvez effectuer les opérations suivantes:

 Ssortingng first = strs.get(0); 

Mais directement à partir d’une collection, cela n’est pas possible.

Il semblerait que votre collection veuille être du type liste, alors je suggère:

 List myList = new ArrayList(); ... Ssortingng first = myList.get(0); 

Dans Java 8, vous avez plusieurs opérateurs à utiliser, par exemple la limite

  /** * Operator that limit the total number of items emitted through the pipeline * Shall print * [1] * @throws InterruptedException */ @Test public void limitStream() throws InterruptedException { List list = Arrays.asList(1, 2, 3, 1, 4, 2, 3) .stream() .limit(1) .collect(toList()); System.out.println(list); } 

Vous pouvez faire un casting. Par exemple, si existe une méthode avec cette définition, et vous savez que cette méthode renvoie une liste:

 Collection getSsortingngs(); 

Et après l’avoir appelé, vous avez besoin du premier élément, vous pouvez le faire comme ceci:

 List listSsortingng = (List) getSsortingngs(); Ssortingng firstElement = (listSsortingng.isEmpty() ? null : listSsortingng.get(0)); 

Si vous savez que la collection est une queue, vous pouvez convertir la collection en queue et l’obtenir facilement.

Il y a plusieurs structures que vous pouvez utiliser pour obtenir la commande, mais vous devrez y jeter un coup.

Cela dépend totalement de l’implémentation que vous avez utilisée, qu’il s’agisse d’une liste liée arraylist ou d’autres implémentations de l’ensemble.

Si elle est définie, vous pouvez directement obtenir le premier élément, leur peut être une boucle de superposition sur la collection, créer une variable de valeur 1 et obtenir une valeur lorsque la valeur de l’indicateur est 1 après cette rupture.

Si c’est l’implémentation de la liste, c’est facile en définissant le numéro d’index.

Vous pourriez faire ceci:

 Ssortingng strz[] = strs.toArray(Ssortingng[strs.size()]); Ssortingng theFirstOne = strz[0]; 

Le javadoc pour Collection donne les réserves suivantes en ce qui concerne l’ordre des éléments du tableau:

Si cette collection garantit l’ordre dans lequel ses éléments sont renvoyés par son iterator, cette méthode doit renvoyer les éléments dans le même ordre.