如何从ArrayList获取String值并将它们存储在Java 8中用逗号分隔的单个字符串中?

前端之家收集整理的这篇文章主要介绍了如何从ArrayList获取String值并将它们存储在Java 8中用逗号分隔的单个字符串中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有一些字符串的ArrayList.我想将ArrayList中的数字列表存储在由逗号分隔的单个字符串中,如下所示.
  1. String s = "350000000000050287,392156486833253181,350000000000060764"

这是我的清单:

  1. List<String> e = new ArrayList<String>();
  2.  
  3. e.add("350000000000050287");
  4. e.add("392156486833253181");
  5. e.add("350000000000060764");

我一直试图通过以下方式实现:

  1. StringBuilder s = new StringBuilder();
  2. for (String id : e){
  3.  
  4. s.append(id+",");
  5.  
  6. }

唯一的问题是,这会在最后添加一个逗号,我不希望这样.最好的方法是什么?

谢谢

解决方法

最简单的解决方案是使用 String.join
  1. List<String> list = new ArrayList<String>();
  2.  
  3. list.add("11");
  4. list.add("22");
  5. list.add("33");
  6.  
  7. String joined = String.join(",",list);
  8.  
  9. System.out.println(joined);
  10. //prints "11,22,33"

请注意,这需要Java 8.

但是,如果要支持旧版本的Java,可以使用迭代器修复代码

  1. StringBuilder sb = new StringBuilder();
  2.  
  3. Iterator<String> iterator = list.iterator();
  4.  
  5. // First time (no delimiter):
  6. if (iterator.hasNext()) {
  7. sb.append(iterator.next());
  8.  
  9. // Other times (with delimiter):
  10. while (iterator.hasNext()) {
  11. sb.append(",");
  12. sb.append(iterator.next());
  13. }
  14. }

或者只是使用布尔值来确定第一次:

  1. StringBuilder sb = new StringBuilder();
  2.  
  3. boolean firstTime = true;
  4.  
  5. for (String str : list) {
  6.  
  7. if (firstTime) {
  8. firstTime = false;
  9. } else {
  10. sb.append(",");
  11. }
  12.  
  13. sb.append(str);
  14. }

但后者显然不如使用迭代器比较每个方法生成的字节码.然而,正如Tagir Valeev所指出的那样,这可能不是真的:这个benchmark向我们表明,使用标志的性能更高,从10开始进行多次迭代.

如果有人能解释为什么会这样,我很高兴知道.

猜你在找的Java相关文章