创建一个生成另一个给定函数的 x 和 y 值的方法
Make a Method Which Generates the x and y values of Another Given Function
我刚开始了解 Java Runnable
,我听说过 Callable
。但是,我非常努力地解决这个问题。我想制作一个将函数作为参数的方法(无论是 Callable
、Runnable
还是其他,只要我可以简单地将函数调用为 coolNewFunction(() -> otherFunction(), 100)
或一些类似的简单方法)并且该方法将 return otherFunction
的 returned 值的数组。例如,假设我定义了函数
public static int square(int x){
return x * x;
}
然后我可以按照以下方式做一些事情:
coolNewFunction(() -> square(), 100)
这将 return 前 100 个数字及其平方的数组(即 {{1, 1}, {2, 4}, {3, 9}...}
)。现在我马上就知道 lambda () -> square()
不起作用,因为 square
必须传递一个值。我虽然创建了一个包含 100 个 Runnable
的数组,每个数组都有 square
的下一个参数,但是方法 run()
仍然没有 return 任何东西。 那么,长话短说,一个方法会是什么样子,它评估另一个函数,该函数作为参数给出,例如 square
在不同的 x 值和 returns 该评估的数组? 另外,最好我不想启动任何新线程,尽管如果这是实现此目的的唯一方法,那也没关系。最后,我不想以特殊方式(最好)实现 square
(或其他)功能。
如果我不使用 Array
,希望您不介意,但我会使用您的 square
方法
public Map<Integer, Integer> lotsOfSquares(int limit) {
return IntStream.rangeClosed(1,limit) // Creates a stream of 1, 2, 3, ... limit
.boxed() // Boxes int to Integer.
.collect(Collectors.toMap(i -> i, // Collects the numbers, i->i generates the map key
i -> square(i)); // Generates the map value
}
这将为您提供包含 {1=1, 2=4, 3=9, ... , 99=9801, 100=10000}
.
的地图
您可能应该在 limit
上添加一些验证。
更新:
public <T> Map<Integer, T> lotsOfResults(int limit, Function<Integer, T> f) {
return IntStream.rangeClosed(1,limit)
.boxed()
.collect(Collectors.toMap(i -> i,
i -> f.apply(i));
}
现在,您可以拨打lotsOfResults(100, i -> square(i))
请注意 T
是 f
的 return 类型——以防您厌倦了平方。
希望对您有所帮助:
public int[][] fn2Array(Function<Integer, Integer> fn, int x) {
int[][] result = new int[x][2];
for (int i; i < x; i++) {
result[i][0]=i+1;
result[i][1]=fn.apply(i+1);
}
return result;
}
我刚开始了解 Java Runnable
,我听说过 Callable
。但是,我非常努力地解决这个问题。我想制作一个将函数作为参数的方法(无论是 Callable
、Runnable
还是其他,只要我可以简单地将函数调用为 coolNewFunction(() -> otherFunction(), 100)
或一些类似的简单方法)并且该方法将 return otherFunction
的 returned 值的数组。例如,假设我定义了函数
public static int square(int x){
return x * x;
}
然后我可以按照以下方式做一些事情:
coolNewFunction(() -> square(), 100)
这将 return 前 100 个数字及其平方的数组(即 {{1, 1}, {2, 4}, {3, 9}...}
)。现在我马上就知道 lambda () -> square()
不起作用,因为 square
必须传递一个值。我虽然创建了一个包含 100 个 Runnable
的数组,每个数组都有 square
的下一个参数,但是方法 run()
仍然没有 return 任何东西。 那么,长话短说,一个方法会是什么样子,它评估另一个函数,该函数作为参数给出,例如 square
在不同的 x 值和 returns 该评估的数组? 另外,最好我不想启动任何新线程,尽管如果这是实现此目的的唯一方法,那也没关系。最后,我不想以特殊方式(最好)实现 square
(或其他)功能。
如果我不使用 Array
,希望您不介意,但我会使用您的 square
方法
public Map<Integer, Integer> lotsOfSquares(int limit) {
return IntStream.rangeClosed(1,limit) // Creates a stream of 1, 2, 3, ... limit
.boxed() // Boxes int to Integer.
.collect(Collectors.toMap(i -> i, // Collects the numbers, i->i generates the map key
i -> square(i)); // Generates the map value
}
这将为您提供包含 {1=1, 2=4, 3=9, ... , 99=9801, 100=10000}
.
您可能应该在 limit
上添加一些验证。
更新:
public <T> Map<Integer, T> lotsOfResults(int limit, Function<Integer, T> f) {
return IntStream.rangeClosed(1,limit)
.boxed()
.collect(Collectors.toMap(i -> i,
i -> f.apply(i));
}
现在,您可以拨打lotsOfResults(100, i -> square(i))
请注意 T
是 f
的 return 类型——以防您厌倦了平方。
希望对您有所帮助:
public int[][] fn2Array(Function<Integer, Integer> fn, int x) {
int[][] result = new int[x][2];
for (int i; i < x; i++) {
result[i][0]=i+1;
result[i][1]=fn.apply(i+1);
}
return result;
}