2011-08-25 2 views
2

J'ai un ensemble de 100 objets. Comment puis-je obtenir un sous-ensemble de 5 objets de cet ensemble?Obtenir un sous-ensemble aléatoire d'un ensemble de résultats en Java

Je fais cela pour l'instant, mais il ne me retourne un objet

  int size = memberSet.size(); 
     Set<Member> randomSet = new HashSet<Member>(); 
      int item = new Random().nextInt(size); 
      int i = 0; 
      for(Member mbr : memberSet) 
      { 
       if (i == item){ 
        randomSet.add(mbr); 
      } 
       i = i + 1; 
      } 
+2

Dup? http://stackoverflow.com/questions/124671/picking-a-random-element-from-a-set –

+3

voir http://stackoverflow.com/questions/136474/best-way-to-pick-a-random -subset-from-a-collection – NPE

+0

On dirait un doublon mais le lien fourni vous permettra de retourner un seul objet aléatoire. L'utilisateur peut vouloir une solution qui renvoie un ensemble de N objets. Mais la question est un peu floue. -> @aix oui qui ressemble à un match: D –

Répondre

13
List<Member> list = new LinkedList<Member>(memberSet); 
Collections.shuffle(list); 
Set<Member> randomSet = new HashSet<Member>(list.subList(0, 5)); 

Exemple complet:

public static void main(String... args) { 

    Set<Member> memberSet = new HashSet<Member>(); 
    for (int i = 0; i < 100; i++) 
     memberSet.add(new Member(i)); 

    List<Member> list = new LinkedList<Member>(memberSet); 
    Collections.shuffle(list); 
    Set<Member> randomSet = new HashSet<Member>(list.subList(0, 5)); 

    System.out.println(randomSet); 
} 

static class Member { 
    final int value; 
    public Member(int value) { 
     this.value = value; 
    } 
    @Override 
    public String toString() { 
     return "" + value; 
    } 
} 
+0

Solution très propre – Wivani

+0

Merci, c'est exactement ce dont j'avais besoin. Clair et simple! –

+2

Très bien. <- Filler pour la règle stupide 15char -> – Farmor

-1

Bien que la solution @dacwe est beaucoup mieux que je peux ne m'aidez pas, sur blague, pour dire simplement mettre un pour (int i = 0; i < 5; i ++) autour de tout et sortir le Set randomSet = new HashSet(); En dehors de la boucle for:

Questions connexes