J'ai une ArrayList d'objets User. Maintenant, j'ai besoin de l'ArrayList des noms de ces utilisateurs seulement. Y at-il un moyen d'utiliser toString()
sur ArrayList entier et le convertir en ArrayList de noms de chaînes plutôt que de le faire dans la boucle for? J'ai également écrasé toString dans la classe Utilisateur afin qu'il renvoie le nom de l'utilisateur, et j'ai essayé ArrayList <String> names = usersList.toString()
mais cela n'a pas fonctionné.Conversion de ArrayList d'objets en ArrayList de ces objets Noms de chaînes en Java
Répondre
Le Object#toString()
renvoie String
, et non un ArrayList
. C'est ton problème. Vous avez vraiment besoin de boucler dessus. Il n'y a absolument aucune raison pour une aversion contre le bouclage. Il suffit de le cacher dans une méthode utilitaire si le code vous tracasse en quelque sorte;)
Avec Java 8, vous pouvez utiliser des expressions lambda, des cours d'eau, et les références de méthode pour simplifier votre code.
Voici
List<User> users = getItSomehow();
List<String> names = new ArrayList<String>();
for (User user : users) {
names.add(user.getName());
}
peut alors être raccourcies à aimer
List<User> users = getItSomehow();
List<String> names = users.stream().map(User::getName).collect(Collectors.toList());
Par ailleurs, vous pouvez également mettre le for
en une seule ligne:
for (User user : users) names.add(user.getName());
Il peut howev ne pas être directement compréhensible pour les débutants.
public ArrayList<String> toStringList(Collection<MyObject> objectList)
{
ArrayList<String> stringList = new ArrayList<String>();
for(MyObject myobj : objectList) {
stringList.add(myobj.toString());
}
return stringList;
}
...
ArrayList<String> myStringList = toStringList(objectList);
Là. Une ligne, et vous pouvez le réutiliser avec n'importe quelle collection d'objets que vous avez dans le futur.
J'ai mentionné que je me demandais si c'est possible sans utiliser pour la boucle, quelque chose comme stringList.addAll (objectList.toString()) – Mike55
@ Mike55 Pourquoi éviter la boucle for? Même si vous écrivez ceci de telle sorte que vous n'utilisez pas de boucle for, en utilisant un appel de bibliothèque comme Goyave, à un moment donné, un morceau de code doit toujours visiter chaque élément de la liste pour le transformer –
Vous pouvez le faire en utilisant le Google Collections API:
List<User> userList = ...;
List<String> nameList = Lists.transform(userList, new Function<User, String>() {
public String apply(User from) {
return from.toString(); // or even from.getName();
}
});
La bibliothèque a été renommé goyave.
Avec Java 8, en utilisant les flux et les références de la méthode que vous pouvez maintenant réaliser la même chose, même sans utiliser Goyave:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class App {
public static void main(String[] args) {
List<User> users = new ArrayList<>(Arrays.asList(
new User("Alan Turing"),
new User("John von Neumann"),
new User("Edsger W Dijkstra")
));
List<String> names = users
.stream()
.map(User::getName)
.collect(Collectors.toList());
System.out.println(names);
}
}
Peut être raccourci à 'List
Comment faire pour le même pour 'ArrayList
@Subra: 'ArrayList
En un mot: Non, ce que vous avez besoin est une fonction map, qui vous n'avez pas en Java (encore, comme le signale BalusC). Vous pouvez écrire vous-même quelque chose de similaire, mais vous finirez par parcourir chaque élément de votre liste.
- 1. Conversion d'une ArrayList de chaînes en BufferedReader
- 2. Conversion d'un tampon Scala en Java ArrayList
- 3. Java ArrayList recherchant plusieurs chaînes
- 4. Java - copier des objets arraylist
- 5. Conversion d'une ArrayList en une Array 2D
- 6. Suppression de ArrayList Java
- 7. Tableau de ArrayList Java
- 8. Implémentation de ArrayList en PHP
- 9. Aide de Java ArrayList!
- 10. Problèmes de Java avec ArrayList
- 11. Java Bean ArrayList
- 12. Java Modcount (ArrayList)
- 13. Comparaison de Java ArrayList- TicTacToe
- 14. Quelle est l'inverse de (ArrayList) .toString pour une Java ArrayList?
- 15. Construire un ArrayList de chaînes en Java aussi simple que l'on peut en Javascript
- 16. Problème avec la classe ArrayList en Java
- 17. vecteur java à arraylist
- 18. Java Arraylist Aide
- 19. Tri de l'objet ArrayList
- 20. ArrayList de tables de hachage en C#
- 21. java arraylist format
- 22. convertir tableau en arraylist?
- 23. Conversion d'une collection Java d'une classe en collection de chaînes
- 24. chercher dans java ArrayList
- 25. Meilleure façon de réorganiser une ArrayList en Java
- 26. Java - Comment convertir une collection de types en ArrayList?
- 27. Fixation null exceptions de pointeur en Java (avec ArrayList)
- 28. Java ArrayList Index
- 29. Supprimer des fichiers de ArrayList en C#
- 30. Java ArrayList: fusionner ArrayLists dans ArrayLists pour créer une ArrayList
BalusC: I mis à jour votre réponse et ajouté l'implémentation Java 8. A l'origine, il avait l'une des spécifications proposées pour ajouter des fermetures et des expressions lambda à Java 7 qui a changé de manière significative lorsqu'il a finalement été introduit dans Java 8. – Behrang
@Behrang: oui, déjà remarqué et corrigé le style et la faute de frappe. – BalusC