Obtenir des objets à partir de la Liste des objets en fonction de la variable dans l'objet
J'ai la Liste de l'Utilisateur de l'objet, je veux juste que les objets Utilisateur dans la Liste sur la base de variables dans l'objet Utilisateur.
public class User {
private int id;
private String sex;
private int age;
private String country;
/**
* Getter and setter for all variables
*/
}
J'ai un modèle de classe comme ça. Maintenant, j'ai la liste des objets Utilisateur.
List<User> users = new ArrayList<User>();
Je veux obtenir les objets de la liste d'utilisateurs si l'utilisateur est un homme.
List<User> ageList = new ArrayList<User>();
for(User object : users) {
if(object.getSex().equals("Male")){
ageList.add(object);
}
}
Je n'aime pas l'approche ci-dessus. Est-il un meilleur moyen d'obtenir des objets à partir de la Liste des objets en fonction de la variable dans l'objet..?
Est-il des fonctions Java Collections ..? pouvons-nous résoudre ce à l'aide de Java Comparateur..?
OriginalL'auteur arulraj.net | 2011-06-05
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Goyave, vous pouvez utiliser
Collections2.filter
:Et avec Java 8, vous pouvez faire encore mieux:
Je suis d'accord, le Rubis est un million de fois mieux:
males = users.select {|user| user.sex == 'Male'}
Même ennuyeux et très ancien SQL
select * from Users where sex = "Male"
j'ai tendance à aimer les expressions qui sont à la fois à court et à besoin de moins de symboles. La plupart des programmeurs peuvent comprendre et écrire de simples SQL.J'étais dans la confusion à propos de l'api à utiliser, google ou des collections de apache colletions.. Enfin j'ai choisi google ..
si je devais faire une Liste<age> filtrés de la collection? comment pourrais-je aller sur le peaufinage.
OriginalL'auteur Chris Jester-Young
Vous pouvez le faire avec les lambda fonctions et de réflexions. Toutefois, depuis Java ne supporte pas les fermetures, vous trouverez que cette approche est plus sujette aux erreurs, nécessite plus de code et est plus lent.
Si vous voulez un moyen rapide de faire de ce que vous pourriez principal d'une Carte<S,<Utilisateur>> ou MultiMap.
BTW: je voudrais utiliser un Enum pour le Sexe de la personne. Vous devriez être en mesure de vous limiter à quelques possibilités 😉 Vous pourriez faire de même avec les Pays.
Quelques possibilités? Voyons voir...femmes, hommes, personnes intersexuées, inconnu, et d'autres (et toutes les autres options que j'ai oublié)? 🙂
Cependant vous le faites, le nombre va être petit.
Et puis il y a ceci: sarahmei.com/blog/2010/11/26/disalienation 🙂
Vrai, mais ce sera difficile de faire des recherches sur. 😉
OriginalL'auteur Peter Lawrey
J'ai trouvé un moyen de java8 avec des cours d'eau filtre
OriginalL'auteur arulraj.net
Pour de simples filtres j'aime lambdaj onliners syntaxe:
http://code.google.com/p/lambdaj/wiki/LambdajFeatures
Pour des conditions complexes, il est préférable de créer filtre séparé finction.
OriginalL'auteur dbf
Utilisation MultiValueMap de Apache commune de la collection ou tout simplement
Map<String List<User>>
de diviser les utilisateurs au début, si obtenir des utilisateurs selon le sexe est tout ce dont vous avez besoin.Aussi longtemps que vous le souhaitez pour obtenir notamment des utilisateurs d'une des ménagères de la collecte, de la recherche à travers l'ensemble de la collection est un must. Donc, il n'y a pas de meilleur moyen de le récupérer. Cependant, vous pouvez masquer cette logique sous la surface.
Apache commun des collections (et Goyave comme Chris Bouffon des Jeunes de la cité) fournir
CollectionUtils.select()
, tout ce que vous devez faire est de mettre en œuvre lesPredicate
. (cocher la réponse de Chris Bouffon,-les Jeunes pour une meilleure explication)Ou, au lieu d'utiliser la collecte de passe des utilisateurs autour de, en faire un objet comme
Users
ouUserPack
. Ensuite, vous pouvez mettre en place un appel de méthodegetMaleUsers()
de retourner tous les hommes les utilisateurs à l'intérieur de l'objet pour vous. Cette astuce est très utile si vous avez besoin de manipuler des objets particuliers pour beaucoup.OriginalL'auteur Rangi Lin