在Java 8中将字符串转换为Map <integer,string>

时间:2019-02-20 06:06:54

标签: java java-8 hashmap

有人可以指导我如何使用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
}

5 个答案:

答案 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)

此解决方案将帮助您创建链接的哈希映射。键是字符,值是字符串中每个字符的计数。

 String str = "preethi";

 Map<Character, Integer> lhm = new LinkedHashMap<>();

 str.chars().mapToObj(x -> (char)x).forEach(ch -> {
          lhm.put(ch, lhm.get(ch) != null ? lhm.get(ch) + 1: 1);
 });

enter image description here