Der von mir gewählte Ansatz hat sich seit Java 1.0 weiterentwickelt, um die Lesbarkeit zu gewährleisten und vernünftige Optionen für die Abwärtskompatibilität mit älteren Java-Versionen beizubehalten, während gleichzeitig Methodensignaturen bereitgestellt werden, die die von apache commons-lang einfach ersetzen. Aus Leistungsgründen kann ich einige mögliche Einwände gegen die Verwendung von Arrays.asList erkennen, aber ich bevorzuge Hilfsmethoden, die sinnvolle Vorgaben haben, ohne die eine Methode zu duplizieren, die die eigentliche Arbeit ausführt. Dieser Ansatz bietet geeignete Einstiegspunkte für eine zuverlässige Methode, die keine Array/List-Konvertierung vor dem Aufruf erfordert.
Mögliche Varianten für die Java-Versionskompatibilität sind der Austausch von StringBuffer (Java 1.0) gegen StringBuilder (Java 1.5), der Austausch des Java-1.5-Iterators und das Entfernen des generischen Platzhalters (Java 1.5) aus der Collection (Java 1.2). Wenn Sie die Abwärtskompatibilität einen oder zwei Schritte weiter gehen wollen, löschen Sie die Methoden, die Collection verwenden, und verlagern Sie die Logik in die array-basierte Methode.
public static String join(String[] values)
{
return join(values, ',');
}
public static String join(String[] values, char delimiter)
{
return join(Arrays.asList(values), String.valueOf(delimiter));
}
// To match Apache commons-lang: StringUtils.join(values, delimiter)
public static String join(String[] values, String delimiter)
{
return join(Arrays.asList(values), delimiter);
}
public static String join(Collection<?> values)
{
return join(values, ',');
}
public static String join(Collection<?> values, char delimiter)
{
return join(values, String.valueOf(delimiter));
}
public static String join(Collection<?> values, String delimiter)
{
if (values == null)
{
return new String();
}
StringBuffer strbuf = new StringBuffer();
boolean first = true;
for (Object value : values)
{
if (!first) { strbuf.append(delimiter); } else { first = false; }
strbuf.append(value.toString());
}
return strbuf.toString();
}