Java 8函数总是返回相同的值而不考虑参数

时间:2014-05-14 21:31:19

标签: java functional-programming java-8

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)方法。有谁知道如何制作它?

1 个答案:

答案 0 :(得分:10)

一个简单的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