我是一个char数组:
private char[] chars = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890-_".toCharArray();
当key是char符号时,我想得到Map
,而value是数组中的char。像这样:
{q=0, w=1,....}
我想使用Stream api
:
Map<Character, Integer> charToInt = IntStream.rangeClosed(0, chars.length)
但我不明白下一步该做什么
答案 0 :(得分:1)
您可以通过这种方式使用String
代替其charArray
:
private String s = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890-_";
然后像这样创建Map
:
Map<Character, Integer> charToInt = s.chars()
.mapToObj(i -> (char) i)
.collect(Collectors.toMap(c -> c, c -> s.indexOf(c)));
所以创建一个Map
智慧为key
char
,并value
为String
答案 1 :(得分:1)
如果您想使用IntStream
:
Map<Character, Integer> charToInt =
IntStream.rangeClosed(0, chars.length-1)
.mapToObj(i -> Integer.valueOf(i)))
.collect(Collectors
.toMap(i -> Character.valueOf(chars[i]), i -> i));
答案 2 :(得分:1)
P.S。我之前有类似的答案。但是我 保持它作为替代,使用Pair类。
要解决此问题,您必须实现Pair
类或使用任何可用的实现(例如我给您最简单的实现):
final class Pair {
private char ch;
private int pos;
public Pair(char ch, int pos) {
this.ch = ch;
this.pos = pos;
}
public char getChar() {
return ch;
}
public int getPos() {
return pos;
}
}
然后你可以使用流来解决你的问题:
Map<Character, Integer> res = IntStream.range(0, chars.length)
.mapToObj(pos -> new Pair(chars[pos], pos))
.collect(Collectors.toMap(Pair::getChar, Pair::getPos));