作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个方法:
public static <T,U,R> Stream<R> cartesian(
List<? extends T> list1,
List<? extends U> list2,
BiFunction<? super T, ? super U, R> func)
{
return list1.stream() // list1.stream() produces Stream<Object> not Stream<? extends T>!
.flatMap(x -> {
return list2.stream()
.map(appendable ->x + "" +appendable);
});
}
由于以下错误,我的整个管道现在返回
Stream<Object>
而不是预期的
Stream<R>
.
最佳答案
“预期类型:...实际类型:...”消息不是关于 list1.stream()
,它是关于您在 flatMap
中的 lambda 中返回的值.观察红色曲线的位置:
据说x -> ...
中的代码lambda 返回 Stream<Object>
,而不是预期的 Stream<R>
.
请注意 map(spendable -> x + "" + appendable)
完全可以返回一个Stream<Object>
使用正确的类型参数(例如,如果它是 .<Object>map(appendable ->x + "" +appendable)
)。
实际上,“预期类型:...实际类型:...”消息仅由 IntelliJ 生成,因此可能只是 IntelliJ 有点傻。如果您运行 javac
,你会得到一个更好的错误信息:
incompatible types: inference variable R#1 has incompatible bounds
.flatMap(x -> {
^
equality constraints: R#2
lower bounds: R#3,String
where R#1,T#1,R#2,T#2,U,R#3 are type-variables:
R#1 extends Object declared in method <R#1>flatMap(Function<? super T#1,? extends Stream<? extends R#1>>)
T#1 extends Object declared in interface Stream
R#2 extends Object declared in method <T#2,U,R#2>cartesian(List<? extends T#2>,List<? extends U>,BiFunction<? super T#2,? super U,R#2>)
T#2 extends Object declared in method <T#2,U,R#2>cartesian(List<? extends T#2>,List<? extends U>,BiFunction<? super T#2,? super U,R#2>)
U extends Object declared in method <T#2,U,R#2>cartesian(List<? extends T#2>,List<? extends U>,BiFunction<? super T#2,? super U,R#2>)
R#3 extends Object declared in method <R#3>map(Function<? super T#1,? extends R#3>)
这表示类型参数
R
在
flatMap
不能推断,因为它的边界不能同时满足。
R
在
flatMap
必须与
R
相同在
cartesian
,但它的下限是
R
在
map
, 和
String
.
return list1.stream()
.flatMap(x -> list2.stream().map(y -> func.apply(x, y)));
关于java - Stream<Object> 而不是 Stream<? extends T> 在列表上调用时产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67278576/
我是一名优秀的程序员,十分优秀!