始终返回相同值而不考虑参数的 Java 8 函数

标签 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) 方法。有人知道怎么做吗?

最佳答案

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

关于始终返回相同值而不考虑参数的 Java 8 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665502/

相关文章:

java - 如何列出 2009 年和 2010 年周一至周四的所有日历日期?

java - Proguard 保持集体诉讼禁止夏洛克

haskell - Haskell中的毕达哥拉斯三元组没有对称解

java - Java 8 中带有 2 个箭头的 lambda 是什么意思?

java - 不存在类型变量 U 的实例,因此 Optional<U> 符合 Response

java - 一元二次方程的解题

optimization - 与优化基于堆栈的系统上的闭包相关的问题的名称是什么?

functional-programming - Jan Willem Klop 的 "(L L L...)"Y 组合器如何工作?

java - 流过滤器效果不佳我想打印 10 行

Java 泛型 Comparable,其中子类无法相互比较