7
votes

Recueillir des biens d'objets dans la collection

en C # Je peux faire ceci:

Collection<Long> ids = new ArrayList<Long>(things.size());
for(Thing x : things)
   ids.add(x.getId());


6 commentaires

Je suppose que choses n'hérite pas de la collecte ou d'un tableau.


Pourquoi supposez-vous cela? Je boucle sur choses à l'aide de pour , il faut donc être un tableau ou un irable au moins.


@Brett Walker Une collection d'identifiants est requis, pas une autre collection de choses


@Brett Je ne veux pas une autre collection de choses, je veux une collection de valeurs d'une certaine propriété de choses, dans cet exemple leur identifiant.


Que voulez-vous faire avec cette collection de corrections. (Mis à part: - Le type de Ce n'a pas été indiqué.) La question spécifique peut offrir différentes solutions lorsque le contexte plus large est pris en compte.


Type de Ce et ce que je veux avec elle est assez non pertinent. Demandé des solutions générales, non spécifiques :)


5 Réponses :


0
votes

in groovy vous ne devez faire que cela: xxx

qui vous donnerait tous les identifiants de toutes les choses choses comme liste.

Voici quelques info sur groovy , et quelque Différences par rapport à Java


0 commentaires

0
votes

Vous pouvez essayer cette méthode. Il faut une collection, une méthode (à partir de l'API de réflexion) et une classe cible. Il invoque la méthode sur tous les membres de la collection et renvoie une liste des résultats.

try {

    Method getId = Thing.class.getMethod("getId", null);
    Collection<Long> result = select(things, getId, Long.class);

} catch (SecurityException e) {
    e.printStackTrace();
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}


0 commentaires

0
votes

Pas vraiment une réponse, mais vous pouvez attendre Java 8, qui aura un support d'expression Lambda. Autre que cela, je pense que Guava est votre meilleure option.


4 commentaires

Avec la vitesse de Java, cela pourrait prendre quelques décennies? : p


C'est sur l'horaire d'octobre 2012, donc c'est juste derrière le coin;)


Mais cela ne signifie pas que je pourrai l'utiliser alors, hehe. Toujours sur 1,6 dans l'organisation, je travaille actuellement ...


Java 8 Lambda Expressions 2014 et comptage



2
votes

en utilisant GUAVA , spécifiquement le Interface de fonction :

Collection<Long> ids = transform(things, new ThingFunction());


0 commentaires

1
votes

Utilisation de Apache Commons 'Beansutils et collections:

Collection<Long> ids = CollectionUtils.collect(things,
        new BeanToPropertyValueTransformer("id"));


0 commentaires