我有String数组,我想获取Map,其中Integer-是String数组元素的索引。在这种情况下,如何避免使用no instance(s) of type variable(s) T
作为地图的钥匙?
AtomicInteger atomicInteger = new AtomicInteger();
String[] a = {"\"a\"", "\"b\"", "\"c\""};
Map<Integer, Integer> map = Arrays.stream(a)
.map(s -> s.replaceAll("\"", "")) // I need to remove '"' from the string
.collect(Collectors.toMap(o -> o, atomicInteger.getAndIncrement()));
有效的解决方案:
Map<String, Integer> map = IntStream.range(0, a.length) .boxed() .collect(Collectors.toMap(i -> a[i].replaceAll("\"", ""), i -> i));
感谢您的帮助!
答案 0 :(得分:0)
您的代码中有两个错误:
您使用的是Map<Integer, Integer>
而不是Map<String, Integer>
。
toMap()
需要两个函数作为参数,但是您正在传递值(atomicInteger.getAndIncrement()
)而不是函数(o -> atomicInteger.getAndIncrement()
)。
因此完整的示例如下:
AtomicInteger atomicInteger = new AtomicInteger();
String[] a = {"\"a\"", "\"b\"", "\"c\""};
Map<String, Integer> map = Arrays.stream(a)
.map(s -> s.replaceAll("\"", "")) // I need to remove '"' from the string
.collect(Collectors.toMap(Function.identity(), o -> atomicInteger.getAndIncrement()));
结果是:
{a=0, b=1, c=2}
此外,使用IntStream
代替使用AtomicInteger
会更好:
String[] a = {"\"a\"", "\"b\"", "\"c\""};
Map<String, Integer> map = IntStream.range(0, a.length).boxed()
.collect(Collectors.toMap(i -> a[i].replaceAll("\"", ""), Function.identity()));