如何使用流随机选择项目
How to get a random selection of items using streams
如果给它一个随机 int 流,是否有办法从流中随机选择项目(无重复)?
例如,我有一个包含 1000 个小部件的列表,我想从该列表中随机选择 25 个小部件。我可以通过生成随机 int 流(数字从 0 到 999)并将其用于小部件流来实现吗?
您可以按照以下方式进行:
- 创建随机实例
- 生成介于 0 和 widgetList.size()-1 之间的值流。
- 确保它们不重复(disinct)
- 限制为 25
- 获取该索引处的小部件
- 存储在列表中。
List<Widget> widgetList; // your populated Widget list
Random r = new Random();
List<Widget> slice =
r.ints(0,1000).distinct().limit(25).mapToObj(widgetList::get).toList();
这应该有效。但是如果列表的上限(在本例中为 1000)小于限制(25),它将永远不会终止。
您也可以只打乱列表并取前 25 个。
Collections.shuffle(widgetList);
如果给它一个随机 int 流,是否有办法从流中随机选择项目(无重复)?
例如,我有一个包含 1000 个小部件的列表,我想从该列表中随机选择 25 个小部件。我可以通过生成随机 int 流(数字从 0 到 999)并将其用于小部件流来实现吗?
您可以按照以下方式进行:
- 创建随机实例
- 生成介于 0 和 widgetList.size()-1 之间的值流。
- 确保它们不重复(disinct)
- 限制为 25
- 获取该索引处的小部件
- 存储在列表中。
List<Widget> widgetList; // your populated Widget list
Random r = new Random();
List<Widget> slice =
r.ints(0,1000).distinct().limit(25).mapToObj(widgetList::get).toList();
这应该有效。但是如果列表的上限(在本例中为 1000)小于限制(25),它将永远不会终止。
您也可以只打乱列表并取前 25 个。
Collections.shuffle(widgetList);