java - 获取列表中访问最少的元素(Java 8)
问题描述
我正在尝试创建一个 API 包装器。这个 API 需要一个 API 密钥,就像大多数人一样。我的目标是在 API 密钥列表之间尽可能均匀地分配使用。这是为了减少速率限制的可能性。
需求:
不可变列表
我能想到的一个解决方案是以某种方式获得访问最少的元素,也许是一个只跟踪使用和实际数据的对象?然后对其进行排序并获得第一个元素?
class Key {
private int uses;
private UUID key;
public Key(UUID key) {
this.key = key;
this.uses = 0;
}
public UUID get() {
this.uses++;
return this.key;
}
public int getUses() {
return this.uses;
}
}
如果需要或者更优雅的解决方案,我愿意使用 maven 库,例如 Google Guava(我已经在使用)。这是它可能看起来的示例。
List<UUID> keys = new ArrayList<>();
public Data getDataFromApi(String name) {
return getData(ENDPOINT_URL_STR + "key=" + keys.getLeastAccessed().toString() + "&name=" + name);
}
解决方案
鉴于密钥集是不可变的,我建议实施循环,即使用第一个密钥,然后使用第二个、第三个等等,直到达到第 n 个,然后从第一个密钥重新开始。
这样,任何 2 个键的用法之间的差异将是 <= 1
推荐阅读
- python - 除了 if else 语句来处理大量数据的有效方法[重复]
- python - python中的所有内置函数是否都带有一个或多个参数,或者某些函数存在异常?
- python - 重命名文件夹中多个文件的最简单方法?
- embedded-cassandra - 如何在 3.0.3 版中查找 Embedded Cassandra 是否已在运行
- python - 使用 Google Chrome 的 selenium webdriver
- reactjs - 反应函数从数组错误生成随机名称
- java - 在没有 POM 的情况下生成和使用 gradle 依赖项
- javascript - 如何停止在angularjs轮播中加载图像
- python-3.x - 仅按 mongodb 中的值匹配并返回文档的 id
- vb.net - 尝试理解和翻译一小段VB代码