我需要生成一个数字序列:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 40, 44, 48, 52, 58, 64, 70, 76, 84, 92, 100, 108, 120, 132, 144
我目前的实现非常简单:
private Set<NameValuePair> getUsersParams(int interval, int size) {
return IntStream.iterate(interval, it -> inc(it, interval))
.limit(size)
.mapToObj(value -> new BasicNameValuePair("u", String.valueOf(value)))
.collect(Collectors.toSet());
}
private int inc(int value, int interval) {
var increment = resolveIncrementFor(value, interval);
return value + increment;
}
private int resolveIncrementFor(int value, int baseInterval) {
if (value < 20) {
return baseInterval;
}
if (value < 52) {
return baseInterval * 2;
}
if (value < 76) {
return baseInterval * 3;
}
if (value < 108) {
return baseInterval * 4;
}
return baseInterval * 6;
}
有没有什么工具可以帮我建立一个简单的数学函数或算法(可能是递归),这将有助于避免我硬编码的值?
或者任何允许我手工定义的算法?
1条答案
按热度按时间gzszwxb41#
如果我没听错的话,你可以用规则定义一个Map或列表。规则将由 predicate 和函数组成。类似这样的内容(尽管代码没有经过测试):
现在的代码仍然是相当混乱和有点多余,当谈到方法签名,但我认为你明白要点。
您可以添加新的规则,而不必接触主代码,因此它的硬编码较少,适用于不同的序列。