【发布时间】:2021-12-20 22:45:36
【问题描述】:
我有下面的示例代码尝试从可迭代对象中构造不可变映射:
ImmutableList<Entry<Integer, Double>> list = ImmutableList.of(
new AbstractMap.SimpleEntry<Integer, Double>(4, 2d),
new AbstractMap.SimpleEntry<Integer, Double>(16, 4d));
ImmutableMap.<Integer, Double>builder().putAll(list); // No error
ImmutableMap.<Integer, Double>builder().putAll(() -> list.stream().iterator()); // Error - cannot convert type...
我收到错误Bad return type in lambda expression: Iterator<Entry<Integer, Double>> cannot be converted to Iterator<Entry<? extends Integer, ? extends Double>>。根据我的理解,这应该是有效的,因为 Integer 是 Integer 的有效上限,而 Double 是 Double 的有效上限。这里有什么问题,我该如何专门修复迭代器代码?
我需要特别修复迭代器代码,因为我正在尝试将另一个集合转换为如下所示的地图。我在 android 上使用 guava,因此无法访问默认的 guava collect() 方法(尽管我认为如果真的没有其他方法可以手动实现它们)。
ImmutableList<Integer> numberList = ImmutableList.of(2,4,8,12,16,24,32);
ImmutableMap.<Integer, Double>builder().putAll(() ->
numberList.stream().map(num ->
(Entry<Integer, Double>) new AbstractMap.SimpleEntry<Integer, Double>(num, Math.sqrt(num))).iterator());
【问题讨论】: