java 遍历地图,除了最后一次迭代
java iterate over map except last iteration
我有下一张地图值:
{title=varchar(50), text=text}
我正在尝试将其转换成两个这样的字符串:
StringBuffer string = new StringBuffer();
for (String keyinside: values.keySet()) {
string.append(keyinside + " " + values.get(keyinside) + ", ");
}
但我想要的是 - 在最后一次迭代时不包括“,”。我该怎么做?
使用一些指标:
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 效率更高(假设您不需要线程安全)。
取一个在每次迭代中递增的计数器,并得到一个 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
我非常喜欢 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>
你可以试试这个.by,我们可以去掉结尾的逗号(,)。
希望对你有帮助。
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?
短java 8个备选:
String result = values.entrySet().stream().map(e -> e.getKey() + " " + e.getValue())
.collect(Collectors.joining(", "))
Stream.map()
将映射中的所有条目转换为条目的字符串描述。
注意Java 8 最后还添加了函数String.join()
。
我有下一张地图值:
{title=varchar(50), text=text}
我正在尝试将其转换成两个这样的字符串:
StringBuffer string = new StringBuffer();
for (String keyinside: values.keySet()) {
string.append(keyinside + " " + values.get(keyinside) + ", ");
}
但我想要的是 - 在最后一次迭代时不包括“,”。我该怎么做?
使用一些指标:
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 效率更高(假设您不需要线程安全)。
取一个在每次迭代中递增的计数器,并得到一个 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
我非常喜欢 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>
你可以试试这个.by,我们可以去掉结尾的逗号(,)。 希望对你有帮助。
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?
短java 8个备选:
String result = values.entrySet().stream().map(e -> e.getKey() + " " + e.getValue())
.collect(Collectors.joining(", "))
Stream.map()
将映射中的所有条目转换为条目的字符串描述。
注意Java 8 最后还添加了函数String.join()
。