How do I get string values from ArrayList and store them in a comma separated single string in Java 8?
I have an ArrayList with some strings I want to store the list of numbers in ArrayList in a single string separated by commas, as shown below
String s = "350000000000050287,392156486833253181,350000000000060764"
Here is my list:
List<String> e = new ArrayList<String>(); e.add("350000000000050287"); e.add("392156486833253181"); e.add("350000000000060764");
I have been trying to achieve this by:
StringBuilder s = new StringBuilder(); for (String id : e){ s.append(id+","); }
The only problem is that this will add a comma at the end, which I don't want What is the best way?
thank you
Solution
The simplest solution is to use string join:
List<String> list = new ArrayList<String>(); list.add("11"); list.add("22"); list.add("33"); String joined = String.join(",",list); System.out.println(joined); //prints "11,22,33"
Note that this requires Java 8
However, if you want to support older versions of Java, you can fix the code using iterators:
StringBuilder sb = new StringBuilder(); Iterator<String> iterator = list.iterator(); // First time (no delimiter): if (iterator.hasNext()) { sb.append(iterator.next()); // Other times (with delimiter): while (iterator.hasNext()) { sb.append(","); sb.append(iterator.next()); } }
Or just use Boolean values to determine the first time:
StringBuilder sb = new StringBuilder(); boolean firstTime = true; for (String str : list) { if (firstTime) { firstTime = false; } else { sb.append(","); } sb.append(str); }
But the latter is obviously not as good as using iterators to compare the bytecode generated by each method However, as tagir valeev pointed out, this may not be true: this benchmark shows us that the performance of using flags is higher, with multiple iterations starting from 10
If anyone can explain why, I'm glad to know