diff --git a/common/CHANGES.txt b/common/CHANGES.txt index b59316397ff..da5f1cb6f2f 100644 --- a/common/CHANGES.txt +++ b/common/CHANGES.txt @@ -239,6 +239,8 @@ Trunk (unreleased changes) HADOOP-7429. Add another IOUtils#copyBytes method. (eli) + HADOOP-7451. Generalize StringUtils#join. (Chris Douglas via mattf) + OPTIMIZATIONS HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole diff --git a/common/src/java/org/apache/hadoop/util/StringUtils.java b/common/src/java/org/apache/hadoop/util/StringUtils.java index 261399c9be1..013443d3abb 100644 --- a/common/src/java/org/apache/hadoop/util/StringUtils.java +++ b/common/src/java/org/apache/hadoop/util/StringUtils.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.StringTokenizer; @@ -741,16 +742,15 @@ public static synchronized String limitDecimalTo2(double d) { * @param separator Separator to join with. * @param strings Strings to join. */ - public static String join(CharSequence separator, Iterable strings) { - StringBuilder sb = new StringBuilder(); - boolean first = true; - for (String s : strings) { - if (first) { - first = false; - } else { - sb.append(separator); - } - sb.append(s); + public static String join(CharSequence separator, Iterable strings) { + Iterator i = strings.iterator(); + if (!i.hasNext()) { + return ""; + } + StringBuilder sb = new StringBuilder(i.next().toString()); + while (i.hasNext()) { + sb.append(separator); + sb.append(i.next().toString()); } return sb.toString(); }