当前位置: 首页 > 面试题库 >

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

童花蜂
2023-03-14
问题内容

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


 类似资料:
  • 我实现了一个模拟ExecutorService来立即返回结果,而无需创建线程: 问题是它总是返回相同的[mocked]Future对象。我需要根据传递给执行器的可调用对象返回Future mock的新实例ServiceMock.submit()我尝试使用PowerMock.expectNew(Future.class),但它抱怨“在类'java.util.concurrent.Future'中找不

  • 函数能够接收参数供自己使用,也可以返回零个或多个值(我们通常把返回多个值称为返回一组值)。相比与 C、C++、Java 和 C#,多值返回是 Go 的一大特性,为我们判断一个函数是否正常执行(参考 第 5.2 节)提供了方便。 我们通过 return 关键字返回一组值。事实上,任何一个有返回值(单个或多个)的函数都必须以 return 或 panic(参考 第 13 章)结尾。 在函数块里面,re

  • 我有以下代码: 问题:是否可以替换 d - *我对这个问题的标题不太清楚-如果有问题,请编辑。 谢啦

  • 问题内容: 目前,我正在使用String操作,在进行演示时,我发现了一些不同的行为。 下面是我的代码。 } 而上面的代码就是。我正在运行传递命令行参数的代码。 str1 == str2 :: true str1 == str3 :: false strArray [0] == strArray [1] :: true str1 == strArray [1] :: true strArray1 [

  • C和C中有没有办法让返回void的函数按照未指定的顺序求值? 我知道函数参数是按未指定的顺序计算的,因此对于不返回void的函数,这可用于以未指定的顺序计算这些函数: 合格编译器编译的合法C和C代码可以按任何顺序打印< code>hi 、< code>bye和< code>moo。这并不是未定义的行为(鼻魔是无效的),有效的输出不止一个,但不一定是无限的,一个兼容的编译器甚至不需要确定它产生了什么

  • 在rust中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。我们先来看看main函数: fn main() { //statements } 之前有说过,函数的返回值类型是在参数列表后,加上箭头和类型来指定的。不过,一般我们看到的main函数的定义并没有这么做。这是因为main函数的返回值是(),在rust中,当一个函数返回()时,可以省略。main函数的完整形式如下: