2016-07-27 36 views
-1

Gibt es einen Grund, warum String.join jetzt nur mit CharSequence-Elementen funktioniert?Java 8 String Join sollte akzeptieren Funktion <E,R>

Es ist ein bisschen schwierig, Elemente verschiedener Sammlungen zu String zu verbinden.

Es wäre Abendessen einfach, dies in der api Unterstützung hinzuzufügen:

public static <E extends Object, R extends CharSequence> String join(final CharSequence delimiter, Iterable<E> elements, Function<E, R> stringExtractor) 

und als die gleiche api zu halten:

public static <E extends Object> String join(final CharSequence delimiter, Iterable<CharSequence> elements) 
{ 
    return join(delimiter, elements, Function.identity()); 
} 

als die ganzen Zahlen verbinden können wir einfach:

+5

Sie machen dies viel zu kompliziert. Verwenden Sie stattdessen den 'joining()' Kollektor. Vorausgesetzt von 'map (Object :: toString)' (oder einer anderen Zuordnungsfunktion) nach Bedarf. –

+0

Fragen Sie, warum eine solche Methode nicht existiert? Oder ist das eine Art Verbesserungsanforderung für das JDK (weil Stack Overflow dafür nicht geeignet ist)? – Tunaki

+0

@BrianGoetz Collectors.joining ist gut, wenn ich Streams verwenden möchte. Ich habe mehr über den Non-Stream-Ansatz nachgedacht. Aber ok, okay, wenn es entschieden wurde, dass es zu kompliziert war. Vielen Dank für Ihre Antwort. – user1571449

Antwort

2

Sind Sie sicher, dass Sie die Collectors.joining() Collector am Ende Ihres Streams nicht möchten?

Beispielcode

List<Integer> numbers = new ArrayList<>(); 

numbers.add(5); 
numbers.add(6); 
numbers.add(7); 
numbers.add(8); 

String value = numbers.stream().map(Object::toString).collect(Collectors.joining("-")); 
System.out.println(value); // Outputs 5-6-7-8 

Arbeitsbeispiel: http://ideone.com/C1EGas

+0

Dies ist für den Fall, wenn Sie Stream API verwenden möchten. Ich kenne den beitretenden Sammler. Die Beispielsammlung, die ich gab, war nur ein Dummy-Beispiel. Aber trotzdem danke für deine Antwort – user1571449