java - 根据条件从ArrayList中获取n个随机元素,并从原始列表中移除
问题描述
拿一个列表:List<MyObject> objects = new ArrayList<>();
,其中每个MyObject
都有一个字段String myString;
。
如何从列表中“弹出”(检索和删除)n
随机元素myString == "myString"
?
编辑:
我已经成功地从列表中删除了一个随机元素,我可以对其进行n
多次迭代,但这似乎效率很低。在我的代码中也没有比较方面。
List<MyObject> objects = new ArrayList<>();
MyObject object = objects.get(Math.random() * objects.size());
objects.remove(object);
解决方案
List<MyObject> filtered = objects.stream()
.filter(o -> o.getMyString().equals("myString"))
.collect(Collectors.toList());
Collections.shuffle(filtered);
List randomList = filtered.subList(0, n);
objects.removeAll(randomList);
推荐阅读
- ubuntu - 无法在适用于 Linux 的 Windows 子系统上通过 npm 安装 webkit (npm ERR!getaddrinfo EAI_AGAIN registry.npmjs.org:443)
- postgresql - 大表上的 Postgres 时间更新
- python - 使用gather_nd构建矩阵
- android - Flutter - 主文件的调用方法
- service - NSSM - 从带有许多参数的命令行安装服务
- single-sign-on - 可以为同一个域上的多个应用程序生成一个 keytab 文件吗?
- opencv - 有时无法使用 opencv 和 dnn 从 rtsp 读取帧
- python - 如何在某些特定行的末尾添加文本
- d3.js - D3 - 工具提示上的 html 结构
- spring-integration - Spring Integration 发送消息直到触发自定义事件