2011-08-25 2 views
2

나는 100 개의 객체 집합을 가지고 있습니다. 이 집합에서 5 개 개체의 하위 집합을 가져올 수 있습니까?자바의 결과 집합에서 임의의 부분 집합 가져 오기

내가 지금이 일을 해요하지만 그것은 단지 나에게 하나의 객체

  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

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

+0

복제본처럼 보이지만 제공되는 링크를 사용하면 하나의 무작위 객체 만 반환 할 수 있습니다. 사용자는 N 개의 객체 집합을 반환하는 솔루션을 원할 수 있습니다. 그러나 질문은 약간 불분명하다. -> @ aix 일치하는 것처럼 보이는 예 : D –

답변

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

전체 예를 반환 @dacwe 솔루션은 훨씬 더 내가 할 수 있지만

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

매우 깨끗한 해결책 – Wivani

+0

고마워, 그게 내가 필요한거야. 명확하고 간단합니다! –

+2

아주 좋습니다. <- 어리석은 15 자 규칙을위한 필러 -> – Farmor

-1

농담에 대한 도움을 청합니다. for (int i = 0; i < 5; i ++) 모든 것을 중심으로 이동 Set randomSet = new HashSet(); for 루프 외부 :

관련 문제