Le moyen le plus efficace pour trouver la collection de tous les id dans une collection d'entités
J'ai une entité:
public class Entity
{
private long id;
private String data;
public long getId() {
return id;
}
public String getData() {
return data;
}
}
et une collection d'entités:
Collection<Entity> entities= ...
Quel est le moyen le plus efficace de trouver le Collection<Long>
de tous les id dans entities
?
Veuillez préciser, par "les plus efficaces", voulez-vous dire "le plus rapide" ou "le plus court"?
depuis j'assume toutes façons itérer sur la collection... dans ce cas, je veux dire "le plus court"
depuis j'assume toutes façons itérer sur la collection... dans ce cas, je veux dire "le plus court"
OriginalL'auteur rapt | 2014-05-22
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez
Dans Java 8, vous pouvez écrire
imprime
Comme vous pouvez l'imaginer, c'est plutôt laid dans Java 7 ou moins. Remarque le
Entity.getId
lorsqu'il est appliqué à la carte() signifie appeler cette méthode sur chaque élément.Maintenant, la vraie partie intéressante est que vous pouvez faire cela.
Dans la plupart des cas à l'aide d'un courant parallèle nuira à la performance, mais il fait de l'essayer et de voir étonnamment facile (peut-être trop facile 😉
Le moyen le plus efficace est d'avoir, ou de construire une Carte.
Guava
ouApache Commons
?sans fermetures, il serait plus code pour utiliser une bibliothèque que de simplement écrire une simple boucle. Pouvez-vous utiliser Java 8?
Dans ce cas, oubliez la Goyave et Apache Commons et juste utiliser les flux, il est beaucoup plus facile. Avez-vous un getter pour Id.
Dans Java 7, vous devez utiliser une boucle. C'est seulement en raison de Java 8 du sucre syntaxique qu'il a même fait un certain sens. Remarque: la boucle est encore plus court code.
L'équivalent est .carte(e -> adresse.getId()).collecter(..)
OriginalL'auteur Peter Lawrey
Vous ne serez pas obtenir quoi que ce soit plus courte que:
Pas nécessairement. Cela crée une collection qui est directement soutenu par les entités sous-jacentes de la collection (les futures modifications apportées aux entités de collecte apparaissent dans l'id de la collection):
OriginalL'auteur Boann
Je ne sais pas si c'est forcément le plus efficace, mais pour le pré-Java 8, je suis devenu friands de l'utilisation de la propriété des interfaces comme décrit ici: http://blog.cgdecker.com/2010/06/property-interfaces-and-guava.html
Comme décrit dans le billet de blog, vous aurez une interface simple nommé quelque chose comme Hassid:
Votre classe d'Entité devrait ressembler à ceci:
et vous aurait une Fonction simple comme ceci quelque part:
Enfin, afin de rendre l'utilisation de celui-ci:
C'est excessif, si vous avez seulement besoin d'une seule chose, mais si vous avez une tonne d'objets qui peuvent sainement, de mettre en œuvre Hassid, ou d'autres interfaces, je trouve ça très agréable de travailler avec.
OriginalL'auteur Scott Strang
Plus efficace? Fondamentalement, il suffit d'itérer et de l'ajouter à la liste. Vous devez regarder chaque élément.
Ou, si vous pouvez utiliser Java 1.8, vous pouvez faire quelque chose comme:
ArrayList
et de spécifier sa taille (c'entities.size()
).entities.forEach((e) -> ids.add(e))
est le même queids.addAll(entries)
;Désolé je voulais dire ids.ajouter de l'e.id)
OriginalL'auteur kmera
Au lieu liste de conversion de flux et ensuite retour à la liste
Je recommande ci-dessous
Collection id = new LinkedList();
les entités.forEach((e) -> id.ajouter de l'e.id));
OriginalL'auteur Shahid Hussain Abbasi