有人可以指导我如何使用Java 8实现以下目标吗?我不知道如何将计数器作为关键
String str = "abcd";
Map<Integer,String> map = new HashMap<>();
String[] strings = str.split("");
int count =0;
for(String s:strings){
map.put(count++, s);// I want the counter as the key
}
答案 0 :(得分:4)
您可以使用IntStream
完成此操作。使用整数值作为键,并使用该索引处的字符串数组中的相关值作为映射的值。
Map<Integer, String> counterToStr = IntStream.range(0, strings.length)
.boxed()
.collect(Collectors.toMap(Function.identity(), i -> strings[i]));
另一个不需要split
的替代方法是
Map<Integer, String> counterToStr = IntStream.range(0, strings.length)
.boxed()
.collect(Collectors.toMap(Function.identity(), i -> str.charAt(i) + ""));
答案 1 :(得分:1)
您可以在没有计数器的情况下执行以下操作:
String str = "abcd";
Map<Integer,String> map = new HashMap<>();
String[] strings = str.split("");
for(int i=0;i<strings.length;i++) {
map.put(i, strings[i]);
}
map.forEach((k,v)->System.out.println(k+" "+v));
另一种解决方法,记入@Holger
for(String s: strings) {
map.put(map.size(), s);
}
答案 2 :(得分:1)
你可以这样写
String str = "abcd";
Map<Integer, Character> map = IntStream.range(0, str.length()).boxed()
.collect(Collectors.toMap(Function.identity(), pos -> str.charAt(pos)));
无需使用String[] strings = str.split("");
简单的单线分隔字符串。
答案 3 :(得分:0)
有很多解决方案:其中一些是这样的:
Map<Integer,Character> map = new HashMap<>();
AtomicInteger atomicInteger = new AtomicInteger(0);
map = str.chars()
.mapToObj(i->new AbstractMap.SimpleEntry<>(atomicInteger.getAndAdd(1),(char)i))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
甚至使用简单的forEach
int count =0;
for (Character c:str.toCharArray()) {
map.putIfAbsent(count++,c);
}
答案 4 :(得分:0)