J'aimerais savoir si je peux obtenir le premier élément d'une liste ou d'un ensemble. Quelle méthode utiliser?
Collection c;
Iterator iter = c.iterator();
Object first = iter.next();
(C’est ce qui se rapproche le plus du "premier" élément de Set
. Vous devez comprendre qu’il n’a absolument aucune signification pour la plupart des implémentations de Set
. Cela peut avoir un sens pour LinkedHashSet et TreeSet, mais pas pour HashSet.)
Dans Java> = 8, vous pouvez également utiliser l'API Streaming:
Optional<String> first = set.stream().findFirst();
(Utile si l'ensemble/la liste peut être vide.)
Supposons que vous avez un List<String> strings
dont vous voulez le premier élément.
Il y a plusieurs façons de le faire:
Java (pré-8):
String firstElement = null;
if (!strings.isEmpty() && strings.size() > 0) {
firstElement = strings.get(0);
}
Java 8:
Optional<String> firstElement = strings.stream().findFirst();
Goyave
String firstElement = Iterables.getFirst(strings, null);
Apache commons (4 +)
String firstElement = (String) IteratorUtils.get(strings, 0);
Apache commons (avant 4)
String firstElement = (String) CollectionUtils.get(strings, 0);
Suivi ou encapsulé dans les contrôles appropriés ou les blocs try-catch.
Kotlin:
Dans Kotlin, les deux Tableaux et la plupart des Collections (par exemple: List) ont un appel à la méthode first
. Donc, votre code ressemblerait à quelque chose comme ça
pour une liste:
val stringsList: List<String?> = listOf("a", "b", null)
val first: String? = stringsList.first()
pour un tableau:
val stringArray: Array<String?> = arrayOf("a", "b", null)
val first: String? = stringArray.first()
Je suis surpris que personne n'ait encore suggéré de solution de goyave:
com.google.common.collect.Iterables.get(collection, 0)
// or
com.google.common.collect.Iterables.get(collection, 0, defaultValue)
// or
com.google.common.collect.Iterables.getFirst(collection, defaultValue)
ou si vous attendez un seul élément:
com.google.common.collect.Iterables.getOnlyElement(collection, defaultValue)
// or
com.google.common.collect.Iterables.getOnlyElement(collection)
Ensemble
set.toArray()[0];
Liste
list.get(0);
Java8 et plus
Set<String> set = new TreeSet<>();
set.add("2");
set.add("1");
set.add("3");
String first = set.stream().findFirst().get();
Cela vous aidera à récupérer le premier élément de la liste ou du jeu. Étant donné que l'ensemble ou la liste n'est pas vide (get()
sur vide facultatif jettera Java.util.NoSuchElementException
)
orElse()
peut être utilisé comme: (ceci est juste une solution de contournement - pas recommandé)
String first = set.stream().findFirst().orElse("");
set.removeIf(String::isEmpty);
Voici l'approche appropriée:
Optional<String> firstString = set.stream().findFirst();
if(firstString.isPresent()){
String first = firstString.get();
}
De même, le premier élément de la liste peut être récupéré.
J'espère que cela t'aides.
Ce n'est pas une réponse exacte à cette question, mais au cas où les objets devraient être triés, SortedSet a une première méthode ():
SortedSet<String> sortedSet = new TreeSet<String>();
sortedSet.add("2");
sortedSet.add("1");
sortedSet.add("3");
String first = sortedSet.first(); //first="1"
Les objets triés doivent implémenter l'interface Comparable (comme le fait String)
Vous pouvez utiliser la méthode get (index) pour accéder à un élément à partir d'une liste.
Les ensembles, par définition, contiennent simplement des éléments et n’ont pas d’ordre particulier. Par conséquent, vous ne pouvez pas obtenir le "premier" élément, mais il est possible de le parcourir à l'aide d'un itérateur (à l'aide de la boucle for each) ou de le convertir en tableau à l'aide de la méthode toArray ().