gpt4 book ai didi

java - Collectors.toMap 不编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:34 27 4
gpt4 key购买 nike

这段代码无法编译

List<String> pairs = new ArrayList<>();
System.out.println(pairs.stream().collect(Collectors.toMap(x -> x.split("=")[0], x -> x.split("=")[1])));

编译错误是:方法 split(String) undefined object 类型System.out.println(pairs.stream().collect(Collectors.toMap(x -> x.split("=")[0], x -> x.split("=")[1]) 错误));

但是这个编译的很好

List<String> pairs = new ArrayList<>();
Map<String,String> map = pairs.stream().collect(Collectors.toMap(x -> x.split("=")[0], x -> x.split("=")[1]));
System.out.println(map);

谁能解释一下为什么?

更多信息

是intellij 12; jdk1.8.0_11; window 64

最佳答案

我假设您使用的是 IDE(如 Eclipse)。 Eclipse - 例如 - 使用它自己的编译器并且不使用“javac”命令(来自 JDK)。

因此,我可以重现您的问题,但只能使用 Eclipse。只需在命令行上使用“javac”编译这段代码就可以了。

问题很简单:Eclipse 编译器无法为 collect 方法的参数推断类型 String。所以它简单地推断出 Object(因为这是类型,编译器可以安全地假设)。而 Object 不知道 split 方法。

您可以通过在 lambda 中显式声明类型来强制编译器了解 String:

List<String> pairs = new ArrayList<>();
System.out.println(pairs.stream().collect(Collectors.toMap((String x) -> x.split("=")[0], x -> x.split("=")[1])));

... 或者通过显式声明 geneirc toMap 方法的正确类型:

List<String> pairs = new ArrayList<>();
System.out.println(pairs.stream().collect(Collectors.<String, String, String> toMap(x -> x.split("=")[0], x -> x.split("=")[1])));

关于java - Collectors.toMap 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861239/

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