gpt4 book ai didi

java-8 - 如何在 Java 8 中使用流在 List 的实例中转换元素?

转载 作者:行者123 更新时间:2023-12-05 09:15:07 25 4
gpt4 key购买 nike

给定代码:

public Statement methodCallByName(MethodDeclaration method, String string) {
List<ExpressionStatement> expressions = method.getBody().statements().stream()
.filter(s -> s instanceof ExpressionStatement)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
return null;
}

我在 Eclipse Oxygen 中有以下错误:

enter image description here

注意 statements() 根据 JDT docs 返回一个 List .

怎么了?

最佳答案

问题是由statements()引起的返回原始类型 List (另请参见 What is a raw type and why shouldn't we use it?)。

原始类型不仅会引发未经检查的操作,还会限制类型推断的适用性。

你可以修复它

public Statement methodCallByName(MethodDeclaration method, String string) {
List<?> statements = method.getBody().statements();
List<ExpressionStatement> expressions = statements.stream()
.filter(s -> s instanceof ExpressionStatement)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
// ...
return null;
}

原始类型的转换List到未知元素类型的列表 List<?> , 是我们在这里可以做的唯一类型安全转换。由于您无论如何都要检查和转换元素,因此没有限制。

但请注意,您应该尽量保持一致。使用任一个

.filter(s -> s instanceof ExpressionStatement)
.map(s -> (ExpressionStatement)s)

.filter(ExpressionStatement.class::isInstance)
.map(ExpressionStatement.class::cast)

关于java-8 - 如何在 Java 8 中使用流在 List 的实例中转换元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52991684/

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