将此 lambda 替换为方法引用

2022-09-04 19:30:01

我有以下代码。Sonar抱怨用方法参考替换这个lambda。

Stream.iterate(0, i -> i + 1).limit(100).map(i -> Integer.toString(i));

如果我用下面的代码替换它,它不会编译错误:类型不匹配:无法从转换为。Stream<Object><unknown>

Stream.iterate(0, i -> i + 1).limit(100).map(Integer::toString);

如何转换为 ?Integer::toStringStream<Object><unknown>


答案 1

这是模棱两可的,因为静态和非静态方法都与功能签名兼容。您可以改用。toString()Integer -> StringString::valueOf


答案 2

你不能放,因为有两个适合功能接口的实现,但你可以改用:Integer::toStringIntegerFunction<Integer, String>String::valueOf

Stream.iterate(0, i -> i + 1)
        .limit(100)
        .map(String::valueOf)
        .collect(Collectors.toList())

推荐