gpt4 book ai didi

java - 使用 JDK 11 的 Stream/FlatMap 中出现编译器错误

转载 作者:行者123 更新时间:2023-11-30 01:46:18 29 4
gpt4 key购买 nike

我从 JDK 1.8.0_212 升级到 JDK 11.0.4,以下代码不再工作。

Map<String, Object> results = new HashMap<>();

Object obj = results.values().stream()
.map(o -> (List) o)
.flatMap(List::stream)
.map(o -> (Map) o)
.map(e -> e.get("id"));

在 Java 11 中,它在最后一行代码中出现此错误:

Error:(13, 24) java: cannot find symbol
symbol: method get(java.lang.String)
location: variable e of type java.lang.Object

这似乎是由 flatMap 引起的,因为这个重新排列的代码工作正常:

Object obj = results.values().stream()
.map(o -> (Map) o)
.map(e -> e.get("id"))
.map(o -> (List) o)
.flatMap(List::stream);

你知道为什么它在 Java 8 中有效但在 Java 11 中无效吗?我需要在 Java 11 中进行哪些更改?

最佳答案

为泛型类型(ListMap)中的类型变量添加类型。所以你不需要任何类型转换,它就会编译。尽管代码可以在 Java 8 下工作,但如果没有类型,则很难理解和维护。它看起来像这样:

Map<String, List<Map<String, Object>>> results = new HashMap<>();

Object obj = results.values().stream()
.flatMap(List::stream)
.map(e -> e.get("id"));

关于java - 使用 JDK 11 的 Stream/FlatMap 中出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57833052/

29 4 0