我有一个数组,里面有50 Object
个。
每次应用启动时,我想从List
中随机获取4个对象。
而不是把它们放在Map
。
如何从数组中随机取出4个对象?
这是我的代码示例:
ArrayList<Deal> dealsTodayArray = dealsToday.getDeals();
Map<String, Object> map = new HashMap<String, Object>();
map.put("dealsTodayFirst", dealsTodayFirst);
map.put("dealsTodaySecond", dealsTodaySecond);
map.put("dealsTodayThird", dealsTodayThird);
map.put("dealsTodayForth", dealsTodayForth);
答案 0 :(得分:5)
尝试Collections.shuffle
和Collections.subList
的组合:
List<String> myStrings = new ArrayList<String>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
myStrings.add("d");
myStrings.add("e");
myStrings.add("f");
Collections.shuffle(myStrings);
System.out.println(myStrings.subList(0, 4));
输出(可能但不保证每次执行时都会更改):
[c, b, f, d]
答案 1 :(得分:1)
您可以使用Random
类在ArrayList
的范围内生成随机索引。
Random rand = new Random();
int size = dealsTodayArray.size();
map.put("dealsTodayFirst", dealsTodayArray.get(rand.nextInt(size)));
// repeat with the 3 others...
答案 2 :(得分:1)
您需要使用get
类,Random
类。使用Random
类生成元素的索引,并使用get
方法检索它。
示例强>
Random random = new Random();
Deal deal = dealsTodayArray.get(random.nextInt(50));
// And repeat a few more times.
答案 3 :(得分:0)
创建一个Random并在循环中生成一个索引以从列表中选择和检索。
答案 4 :(得分:0)
如果安全性是一个问题,请尝试以下方法之一:
Random sr = new SecureRandom();
Collections.shuffle(dealsTodayArray, sr);
final int N = 4;
for( int i=0; i<N; i++ ) {
map.put("dealsTodayFirst", dealsTodayArray.get(i));
}
Random sr = new SecureRandom();
final int N = 4;
final int len = dealsTodayArray.size();
for( int i=0; i<N; i++ ) {
map.put("dealsTodayFirst", dealsTodayArray.get(sr.nextInt(len)));
}