【问题标题】:java iterate over map except last iterationjava迭代地图,除了最后一次迭代
【发布时间】:2015-02-26 11:46:04
【问题描述】:

我有下一张地图价值观

{title=varchar(50), text=text}

我正在尝试将它转换成这样的两个字符串:

StringBuffer string = new StringBuffer();
for (String keyinside: values.keySet()) {
    string.append(keyinside + " " + values.get(keyinside) + ", ");
}

但我在这里想要的是 - 在最后一次迭代中不包括“,”。我该怎么做?

【问题讨论】:

    标签: java iteration


    【解决方案1】:

    短 java 8 替代方案:

    String result = values.entrySet().stream().map(e -> e.getKey() + " " + e.getValue())
                             .collect(Collectors.joining(", "))
    

    Stream.map() 将映射中的所有条目转换为条目的字符串描述。

    请注意,Java 8 最后还添加了函数String.join()

    【讨论】:

    • 漂亮、简单、优雅
    【解决方案2】:

    使用一些指标:

    StringBuffer string = new StringBuffer();
    boolean first = true;
    for (String keyinside: values.keySet()) {
        if (!first)
            string.append (", ");
        else
            first = false;
        string.append(keyinside + " " + values.get(keyinside));
    }
    

    顺便说一句,使用 StringBuilder 效率更高(假设您不需要线程安全)。

    【讨论】:

      【解决方案3】:

      我非常喜欢来自 Google 收藏库的 Joiner。你可以这样做:

      on(",").withKeyValueSeparator(" ").join(values);
      

      on 是从com.google.common.base.Joiner 静态导入的。

      如果你使用 Maven,只需添加一个依赖项:

      <dependency>
          <groupId>com.google.collections</groupId>
          <artifactId>google-collections</artifactId>
          <version>1.0</version>
      </dependency>
      

      【讨论】:

        【解决方案4】:

        获取一个在每次迭代中递增的计数器并获取一个 if 条件来检查它是否在最后一次迭代

        一个简单的技巧是

                int i = 0 ;
                for (String keyinside: values.keySet()) {
                    string.append(keyinside + " " + values.get(keyinside));
                    if((i+1)<values.keySet().size()){
                        string.append(", ");
                    }
                    i++;
                }
        

        如果线程安全不是问题,我建议你使用 StringBuilder

        【讨论】:

          【解决方案5】:

          你可以试试这个。通过它我们可以删除最后的逗号(,)。 希望对您有所帮助。

              Map<String,String> s= new LinkedHashMap<String,String>();
              s.put("1", "A");
              s.put("2", "B");
              s.put("3", "C");
              StringBuffer sb = new StringBuffer();
              String ans=null;
              for (String keyinside: s.keySet()) {
                   sb.append(keyinside + " " + s.get(keyinside) + ", ").toString();
              } 
              System.out.println(sb);
              ans=sb.substring(0, sb.length()-2).toString();
              System.out.println(ans);
          

          注意:可以参考How to remove the last character from a string?

          【讨论】:

            猜你喜欢
            • 2018-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-13
            • 1970-01-01
            • 2010-09-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多