【问题标题】:Converting string to Map<Integer,String> in java 8在 java 8 中将字符串转换为 Map<Integer,String>
【发布时间】:2021-06-06 00:38:21
【问题描述】:

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

【问题讨论】:

标签: java java-8 hashmap


【解决方案1】:

您可以使用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) + "")); 

【讨论】:

    【解决方案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(""); 拆分字符串,简单的单行。

    【讨论】:

      【解决方案3】:

      你可以在没有计数器的情况下这样做:

      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);
       }
      

      【讨论】:

      • for(String s: strings) map.put(map.size(), s);
      • @Holger ,是的,它会起作用,我将它添加到答案中。
      【解决方案4】:

      有很多解决方案:其中一些是这样的:

      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);
      }
      

      【讨论】:

        【解决方案5】:

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

         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);
         });
        

        【讨论】:

          猜你喜欢
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-24
          • 2019-12-06
          • 1970-01-01
          • 1970-01-01
          • 2022-09-30
          相关资源
          最近更新 更多