Java flatMap需要不必要的铸造

Java flatMap需要不必要的铸造,java,java-stream,Java,Java Stream,我有以下代码: List<Person> p = groups.parallelStream() .filter(group -> group.size > 0) .flatMap(group -> { R r = callAsyncMethod(group.id); if (r != null) { return Stream.of(anotherAsyncCall(r)) }

我有以下代码:

List<Person> p = groups.parallelStream()
    .filter(group -> group.size > 0)
    .flatMap(group -> {
        R r = callAsyncMethod(group.id);
        if (r != null) {
            return Stream.of(anotherAsyncCall(r))
        }
        return Stream.empty();
    })
    .collect(Collectors.toList());
List p=groups.parallelStream()
.filter(组->组大小>0)
.flatMap(组->{
R=callAsyncMethod(group.id);
如果(r!=null){
返回流.of(另一个异步调用(r))
}
返回Stream.empty();
})
.collect(Collectors.toList());
anotherAsyncCall
返回
人员的列表。现在,我得到一个编译错误,需要我将
List
更改为
List


我想知道我做错了什么

流可以包含任何类型值,例如下面的流包含字符串列表和整数列表

Stream.of(List.of("Deadpool","Iron Man"),List.of(1,2));

@SafeVarargs
静态流(T…值)
返回其元素为指定值的顺序流

但该方法只返回一个序列流,并将此集合作为其源

default Stream<E> stream()
defaultstream()
返回以此集合作为其源的序列流

default Stream<E> stream()

试着用这种方法
返回另一个异步调用(r).stream()
成功了!为什么它能解决这个问题?@ArianHosseinzadeh,这个解决方案之所以有效,是因为
flatMap
将函数映射到一个值流,并将输出转换为一个值流。以前,有一个函数返回一系列值。通过调用列表上的
stream
,您现在有了一个值流,这是提供给flatMap的参数的正确返回类型。@ArianHosseinzadeh
stream.of(collection)
返回一个
流,其中一个元素就是集合本身。另一方面,
collection.stream()
返回包含
collection
元素的
stream
。我希望你现在明白了?