gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:26 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com