在使用Java8流API过滤和转换对象之后,需要再次转换列表

在使用Java8流API过滤和转换对象之后,需要再次转换列表,java,intellij-idea,java-stream,Java,Intellij Idea,Java Stream,我有一个对象列表,我想过滤掉那些特定类型的对象,将它们转换并收集到一个新列表中。这就是我使用以下问题中建议的流API的原因: 然而,Intellij告诉我,在过滤、播放和收集之后,我必须再次播放收集的列表,我想知道为什么?如果我接受这个建议,错误就会消失,但这是正确的方法吗 背景:我正在使用EclipseJDT开发一个静态程序分析,因此我将覆盖visit()方法来处理特定类型的AST节点 下面是我处理AnnotationTypeDeclaration的代码: @覆盖 公共布尔访问(Anno

我有一个对象列表,我想过滤掉那些特定类型的对象,将它们转换并收集到一个新列表中。这就是我使用以下问题中建议的流API的原因:

然而,Intellij告诉我,在过滤、播放和收集之后,我必须再次播放收集的列表,我想知道为什么?如果我接受这个建议,错误就会消失,但这是正确的方法吗

背景:我正在使用EclipseJDT开发一个静态程序分析,因此我将覆盖visit()方法来处理特定类型的AST节点

下面是我处理AnnotationTypeDeclaration的代码:

@覆盖
公共布尔访问(AnnotationTypeDeclaration节点){
List memberDeclarations=(List)node.bodyDeclarations().stream()
.filter(AnnotationTypeMemberDeclaration.class::isInstance)
.map(AnnotationTypeMemberDeclaration.class::cast)
.collect(Collectors.toList());
//…对成员声明做些什么
返回true;
}
以下是annotationTypeDeclaration.bodyDeclarations()的定义:

public List bodyDeclarations(){
返回此文件,并提交声明;
}

您是否有机会为同一类导入不同的软件包?
节点.主体声明的类型是什么?(并且不要为代码共享图像)您可以将代码作为代码发布,以便可以复制粘贴它吗?您能否给出一个完整的示例(例如:
节点的类型是什么?)。问题是
公共列表bodyDeclarations()
返回一个。如果bodyDeclarations()开始返回List,而不是正确提到的rawtype,是否会有所帮助?然后使用
((List)node.bodyDeclarations()).stream()
作为流操作的起点。强制转换不会发出任何警告,因为您表示列表元素类型未知,但后续操作不再使用原始类型,因此
.map(AnnotationTypeMemberDeclaration.class::cast)
将具有所需的效果。您是否有机会为同一类使用不同的包
导入
节点.主体声明的类型是什么?(并且不要为代码共享图像)您可以将代码作为代码发布,以便可以复制粘贴它吗?您能否给出一个完整的示例(例如:
节点的类型是什么?)。问题是
公共列表bodyDeclarations()
返回一个。如果bodyDeclarations()开始返回List,而不是正确提到的rawtype,是否会有所帮助?然后使用
((List)node.bodyDeclarations()).stream()
作为流操作的起点。强制转换不会发出任何警告,因为您表示列表元素类型未知,但后续操作不再使用原始类型,因此
.map(AnnotationTypeMemberDeclaration.class::cast)
将具有所需的效果。