5

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

5 回答 5

5

你可以用它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) + "")); 
于 2019-02-20T06:24:18.010 回答
2

你可以这样写

    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("");简单的单线分割字符串。

于 2019-02-20T06:44:10.177 回答
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);
 }
于 2019-02-20T06:31:16.360 回答
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);
}
于 2019-02-20T07:54:27.587 回答
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);
 });

在此处输入图像描述

于 2021-06-05T16:38:21.500 回答