Java 8 中是否有一个预定义的函数可以执行以下操作:
static <T, R> Function<T, R> constant(R val) {
return (T t) -> {
return val;
};
}
为了回答人们关于为什么我需要这个函数的疑问,这是我尝试将整数解析为罗马数字时的实际用法:
// returns the stream of roman numeral symbol based
// on the digit (n) and the exponent (of 10)
private static Stream<Symbol> parseDigit(int n, int exp) {
if (n < 1) return Stream.empty();
Symbol base = Symbol.base(exp);
if (n < 4) {
return IntStream.range(0, n).mapToObj(i -> base);
} else if (n == 4) {
return Stream.of(base, Symbol.fifth(exp));
} else if (n < 9) {
return Stream.concat(Stream.of(Symbol.fifth(exp)),
IntStream.range(5, n).mapToObj(i -> base));
} else { // n == 9 as n always < 10
return Stream.of(base, Symbol.base(exp + 1));
}
}
我猜IntStream.range(0, n).mapToObj(i -> base)
可以简化为类似的东西Stream.of(base).times(n - 1)
, 不幸的是,这儿没有times(int)
流对象上的方法。有谁知道怎么做吗?
一个简单的 lambda,x -> val
似乎与你的方法等效;
Function<Integer, Integer> test1 = constant(5);
Function<Integer, Integer> test2 = x -> 5;
...应用时都忽略输入并输出常数 5;
> System.out.println(test1.apply(2));
5
> System.out.println(test2.apply(2));
5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)