{})-6ren">
gpt4 book ai didi

java - 如何指定 lambda 表达式的类型?

转载 作者:行者123 更新时间:2023-12-01 07:49:17 25 4
gpt4 key购买 nike

我尝试过:

Stream stream = Pattern.compile(" ").splitAsStream(sc.nextLine());
stream.forEach(item) -> {});

得到:

Compilation Error... 
File.java uses unchecked or unsafe operations.
Recompile with -Xlint:unchecked for details.

所以我尝试了:

Stream stream = Pattern.compile(" ").splitAsStream(sc.nextLine());
stream.forEach((String item) -> {});

得到:

Compilation Error... 
15: error: incompatible types: incompatible parameter types in lambda expression
stream.forEach((String item) -> {});
^
Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

如何让这个 .forEach() 通过编译?

最佳答案

您已将Stream定义为raw type,它删除所有类型信息并(基本上)使用 Object 作为类型。

试试这个:

Stream<String> stream = Pattern.compile(" ").splitAsStream(sc.nextLine());
// ^----^ add a generic type to the declaration
stream.forEach(item -> {
// item is know to be a String
});

或者更简单,只需将其内联即可:

Pattern.compile(" ").splitAsStream(sc.nextLine()).forEach(item -> {});

或者更简单:

Arrays.stream(sc.nextLine().split(" ")).forEach(item -> {});
<小时/>

虽然更简单,但最后一个版本使用 O(n) 空间,因为整个输入在执行第一个 forEach() 之前被分割 .
其他版本使用 O(1) 空间,因为 Pattern#splitAsStream() 在内部使用 Matcher 来迭代输入,从而一次消耗输入匹配。
除非输入相当大,否则这种副作用不会产生太大影响。

关于java - 如何指定 lambda 表达式的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41664058/

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