【发布时间】:2017-10-21 12:29:15
【问题描述】:
我有一个 Set<String> 的 "hostname:port" 对,我想从中创建一个 Set<InetSocketAddress>。我试过了:
Set<InetSocketAddress> ISAAddresses = StrAddresses
.stream().map(addr -> new InetSocketAddress(
addr.split(":")[0],
Integer.parseInt(addr.split(":")[1])));
但这会在 IntelliJ 中产生以下错误:
不兼容的类型。必需
Set<InetSocketAddress>但“地图”是 推断为Stream<R>:不存在类型变量 R 的实例,所以Stream<R>符合Set<InetSocketAddress>
我使用地图和 lambda 的方式一定有问题。
【问题讨论】:
-
“**不起作用”是什么意思?它不编译吗?它会输出错误的结果吗?请准确说明发生了什么。
-
请注意,请遵守命名约定。变量名应始终以小写字母开头(方法名相同,类名只有驼峰式)。
-
@tom 你应该把它放在问题中,而不是作为评论。
-
除了添加
collect调用之外,我建议使用两个map调用以避免拆分两次。.map(addr -> addr.split(":")).map(arr -> new InetSocketAddress(arr[0], Integer.parseInt(arr[1)) -
@PaulBoddington 好点,保存第二个
split电话。在我的回答中添加了这一点。
标签: java lambda java-8 java-stream