Question

Si j'ai une collection, comme Collection<String> strs, comment puis-je obtenir le premier élément sur? Je pourrais appeler un Iterator, prendre son premier next(), puis jeter le Iterator loin. Est-il un moyen moins inutile de le faire?

Était-ce utile?

La solution

Iterables.get (yourC, indexYouWant)

Parce que vraiment, si vous utilisez des collections, vous devriez utiliser Google collections.

Autres conseils

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

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

Grande question ... Tout d'abord, il semble comme un contrôle de l'interface Collection.

Notez que « premier » ne reviendra pas toujours la première chose que vous mettez dans la collection, et ne peut donner un sens des collections ordonnées. Peut-être est la raison pour laquelle il n'y a pas un appel get(item), puisque l'ordre est pas nécessairement conservé.

Bien qu'il puisse sembler un peu inutile, il pourrait ne pas être aussi mauvais que vous le pensez. Le Iterator contient vraiment juste des informations d'indexation dans la collection, généralement pas une copie de la collection. Cette méthode fait l'invocation instancier l'objet Iterator, mais qui est vraiment la seule tête (pas comme copier tous les éléments).

Par exemple, en regardant le type retourné par la méthode ArrayList<String>.iterator(), nous voyons qu'il est ArrayList::Itr. Ceci est une classe interne qui accède simplement les éléments de la liste directement, plutôt que de les copier.

juste être sûr de vérifier le retour de iterator() car il peut être vide ou null en fonction de la mise en œuvre.

java 8:

Optional<String> firstElement = collection.stream().findFirst();

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

Iterables.getFirst(iterable, defaultValue)

Il n'y a pas une telle chose comme élément « première » dans un Collection parce qu'il est .. bien simplement une collection.

Dans le doc de Java Collection. itérateur () méthode :

  

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

Vous ne pouvez pas.

Si vous utilisez autre interface telle que Liste , vous pouvez faire ce qui suit:

String first = strs.get(0);

Mais directement à partir d'une collection ce n'est pas possible.

Il semble que votre collection veut être comme liste, je vous suggère:

List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);

En Java 8 vous avez des nombreux opérateurs à utiliser, par exemple 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<Integer> 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<String> getStrings();

Et après l'appeler, vous avez besoin du premier élément, vous pouvez le faire comme ceci:

List<String> listString = (List) getStrings();
String firstElement = (listString.isEmpty() ? null : listString.get(0));

Goyave fournit une onlyElement de Collector, mais seulement l'utiliser si vous attendez la collection d'avoir un seul élément.

Collection<String> stringCollection = ...;
String string = collection.stream().collect(MoreCollectors.onlyElement())

Si vous n'êtes pas sûr de combien d'éléments il y a, utilisez findFirst.

Optional<String> optionalString = collection.stream().findFirst();

Si vous savez que la collection est une file d'attente, vous pouvez lancer la collection à une file d'attente et d'obtenir facilement.

Il existe plusieurs structures que vous pouvez utiliser pour obtenir l'ordre, mais vous aurez besoin de jeter à lui.

Il dépend totalement de la mise en œuvre qui vous avez utilisé, que ce soit arraylist chaînée, ou d'autres implémentations de jeu.

si elle est définie, vous pouvez alors obtenir directement le premier élément, leur peut être boucle trick sur la collection, créer une variable de valeur 1 et obtenir la valeur lorsque la valeur du drapeau est 1 après briser cette boucle.

si elle est mise en œuvre de la liste, il est facile en définissant le numéro d'index.

Vous pouvez faire ceci:

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

La javadoc pour Collection donne l'ordre de mise en garde suivante wrt des éléments du tableau:

  

Si cette collection fait aucune garantie quant à l'ordre ses éléments sont retournés par son iterator, cette méthode doit renvoyer les éléments dans le même ordre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top