Java迭代Map除最后一次迭代

6
我有下一个地图的

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

我正在尝试将它转换为两个字符串,如下:
StringBuffer string = new StringBuffer();
for (String keyinside: values.keySet()) {
    string.append(keyinside + " " + values.get(keyinside) + ", ");
}

我想在最后一次迭代中不包含“,”。我该怎么做?
5个回答

11

Java 8的简短替代方案:

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

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

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


好的,简单的,优美的 - Valdrinium

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会更加高效。


1

请设置一个计数器,每次迭代时递增,并编写一个条件语句来检查是否正在进行最后一次迭代。

一个简单的技巧是

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

如果不考虑线程安全,我建议您使用StringBuilder。


1

我非常喜欢Google collections库中的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>

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

注意:您可以参考如何从字符串中删除最后一个字符?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接