从java的结果集中获取一个随机子集
问题描述:
我有一组100个对象。 我怎样才能从这个集合中获得5个对象的子集?从java的结果集中获取一个随机子集
我做这个,但现在它只返回我一个对象
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;
}
答
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;
}
}
答
对我自己没有帮助,对笑话,只是说放一个for(int i = 0; i < 5; i ++)围绕一切,并移出Set randomSet = new HashSet(); 外循环:
Dup? http://stackoverflow.com/questions/124671/picking-a-random-element-from-a-set – 2011-08-25 13:37:38
请参阅http://stackoverflow.com/questions/136474/best-way-to-pick-a-random -subset-from-a-collection – NPE
看起来像重复,但提供的链接将允许您只返回一个随机对象。用户可能想要一个返回一组N个对象的解决方案。但问题有点不清楚。 - > @aix是的,看起来像一个匹配:D –