java迭代地图,除了最后一次迭代

时间:2015-02-26 11:46:04

标签: java iteration

我有下一张地图

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

我正在尝试将其转换为两个字符串:

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

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

5 个答案:

答案 0 :(得分:7)

简短的Java 8替代方案:

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

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

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

答案 1 :(得分:1)

使用一些指标:

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更有效率(假设你不需要线程安全)。

答案 2 :(得分:1)

取一个计数器,在每次迭代中递增并得到一个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

答案 3 :(得分:1)

我非常喜欢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 :(得分:0)

你可以尝试这个。我们可以删除末尾的逗号(,)。 希望这会对你有所帮助。

    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?