【发布时间】:2021-03-27 03:31:25
【问题描述】:
我需要产生一个数字序列:
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;
}
是否存在任何工具可以为我构建一个简单的数学函数或算法(可能带有递归),这将有助于避免我硬编码值?
或者任何允许我手动定义它的算法?
【问题讨论】:
-
我不太明白你想做什么。你能说得更具体点吗?
-
@Babofett 我想要一个函数,它可以让我避免硬编码范围并像
IntStream.range(1,29).map(i -> func(i)).collect(toList())一样写出我上面写的结果。像斐波那契行,但对于我的序列。
标签: java function math statistics sequence