Wie man StringJoiner in Java 8 verwendet und wie man Strings verbindet

Der in Java 8 bereitgestellte StringJoiner. In diesem Artikel werden die Rekruten dieses String-Spleißens vorgestellt.

Wenn Sie wissen möchten, wie viele Möglichkeiten es gibt, Zeichenfolgen zu verketten, zeige ich Ihnen eine einfache Methode. Definieren Sie in Intellij IDEA eine Java Bean und versuchen Sie dann, mithilfe von Tastenkombinationen automatisch eine toString-Methode zu generieren. IDEA fordert Sie dazu auf Generieren Sie mehrere toStrings. Strategien sind verfügbar.

![][2]

Derzeit verwendet die toString-Generierungsstrategie von IDEA I standardmäßig den von JDK 1.8 bereitgestellten StringJoiner.

einführen

StringJoiner ist eine Klasse im Paket java.util, die zum Erstellen einer durch ein Trennzeichen (optional) getrennten Zeichenfolge verwendet wird und mit dem bereitgestellten Präfix beginnen und mit dem bereitgestellten Suffix enden kann. Während dies auch mit Hilfe der StringBuilder-Klasse möglich ist, um nach jeder Zeichenfolge ein Trennzeichen anzuhängen, bietet StringJoiner eine einfache Möglichkeit, dies zu tun, ohne viel Code schreiben zu müssen.

Die StringJoiner-Klasse verfügt über 2 Konstruktoren und 5 öffentliche Methoden. Die am häufigsten verwendeten Methoden sind die Add-Methode und die ToString-Methode, die der Append-Methode und der ToString-Methode in StringBuilder ähneln.

Verwendung

Die Verwendung von StringJoiner ist relativ einfach. Im folgenden Code verwenden wir StringJoiner zum Spleißen von Zeichenfolgen.

public class StringJoinerTest {

    public static void main(String[] args) {
        StringJoiner sj = new StringJoiner("Hollis");

        sj.add("hollischuang");
        sj.add("Java干货");
        System.out.println(sj.toString());

        StringJoiner sj1 = new StringJoiner(":","[","]");

        sj1.add("Hollis").add("hollischuang").add("Java干货");
        System.out.println(sj1.toString());
    }
}

Die Ausgabe des obigen Codes ist:

hollischuangHollisJava干货
[Hollis:hollischuang:Java干货]

Es ist erwähnenswert, dass es sich bei der StringJoiner(CharSequence delimiter)Initialisierung von one tatsächlich um ein StringJoinerTrennzeichen delimiterund nicht um den Anfangswert der Variablenzeichenfolge handelt.

StringJoiner(CharSequence delimiter,CharSequence prefix,CharSequence suffix)Der zweite und dritte Parameter von sind das Präfix bzw. Suffix der verketteten Zeichenfolge.

Prinzip

Nachdem wir die einfache Verwendung vorgestellt haben, werfen wir einen Blick auf das Prinzip dieses StringJoiners und sehen, wie es implementiert wird. Schauen Sie sich hauptsächlich die Add-Methode an:

public StringJoiner add(CharSequence newElement) {
    prepareBuilder().append(newElement);
    return this;
}

private StringBuilder prepareBuilder() {
    if (value != null) {
        value.append(delimiter);
    } else {
        value = new StringBuilder().append(prefix);
    }
    return value;
}

Ich habe eine bekannte Figur gesehen - StringBuilder. Ja, StringJoiner wird tatsächlich mithilfe von StringBuilder implementiert.

Wenn wir feststellen, dass StringJoiner tatsächlich von StringBuilder implementiert wird, können wir wahrscheinlich davon ausgehen, dass der Leistungsverlust dem der direkten Verwendung von StringBuilder ähnlich sein sollte !

Warum StringJoiner benötigt wird

Nachdem viele Leser die Verwendung und das Prinzip von StringJoiner verstanden haben, haben sie möglicherweise eine Frage: Offensichtlich gibt es bereits einen StringBuilder. Warum sollte ein StringJoiner in Java 8 definiert werden? Was sind die Vorteile?

Wenn der Leser genug über Java 8 weiß, können Sie möglicherweise vermuten, dass es mit Stream zusammenhängt.

Der Autor fand die Antwort auch im [Java-Dokument][3]:

Ein StringJoiner kann verwendet werden, um mithilfe von Collectors.joining(CharSequence) eine formatierte Ausgabe aus einem Stream zu erstellen.

Stellen Sie sich vor, wir hätten in Java eine solche Liste:

List<String> list = ImmutableList.of("Hollis","hollischuang","Java干货");

Wenn wir es zu einer Zeichenfolge der folgenden Form verketten möchten:

Hollis,hollischuang,Java干货

Dies kann auf folgende Weise erfolgen:

StringBuilder builder = new StringBuilder();

if (!list.isEmpty()) {
    builder.append(list.get(0));
    for (int i = 1, n = list.size(); i < n; i++) {
        builder.append(",").append(list.get(i));
    }
}
builder.toString();

Sie können auch Folgendes verwenden:

list.stream().reduce(new StringBuilder(), (sb, s) -> sb.append(s).append(','), StringBuilder::append).toString();

Die Ausgabe unterscheidet sich jedoch geringfügig und erfordert eine sekundäre Verarbeitung:

Hollis,hollischuang,Java干货,

Sie können zur Verkettung auch „+“ verwenden:

list.stream().reduce((a,b)->a + "," + b).toString();

Bei den oben genannten Methoden ist entweder der Code kompliziert, die Leistung nicht hoch oder das gewünschte Ergebnis kann nicht direkt erzielt werden.

Um Anforderungen wie diese zu erfüllen, ist der in Java 8 bereitgestellte StringJoiner hilfreich. Für die oben genannten Anforderungen ist nur eine Codezeile erforderlich:

list.stream().collect(Collectors.joining(":"))

Das ist es. Im oben verwendeten Ausdruck lautet der Quellcode von Collectors.joining wie folgt:

public static Collector<CharSequence, ?, String> joining(CharSequence delimiter,
                                                         CharSequence prefix,
                                                         CharSequence suffix) {
    return new CollectorImpl<>(
            () -> new StringJoiner(delimiter, prefix, suffix),
            StringJoiner::add, StringJoiner::merge,
            StringJoiner::toString, CH_NOID);
}

Das Realisierungsprinzip besteht darin, StringJoiner zu verwenden.

Natürlich scheint es, dass ähnliche Funktionen Collectordurch die direkte Verwendung StringBuildererreicht werden können , aber das ist etwas mühsamer. Daher bietet Java 8 StringJoinereine umfassende StreamNutzung.

Und StringJoineres ist auch praktisch, Präfixe und Suffixe hinzuzufügen. Wenn die Zeichenfolge, die wir erhalten möchten, beispielsweise [Hollis,hollischuang,Java干货]keine Hollis,hollischuang,JavaTrockenware ist, sind die Vorteile von StringJoiner noch offensichtlicher.

Zusammenfassen

In diesem Artikel wird die in Java 8 bereitgestellte variable String-Klasse – StringJoiner – vorgestellt, die zum String-Spleißen verwendet werden kann.

StringJoiner wird tatsächlich über StringBuilder implementiert, sodass seine Leistung der von StringBuilder ähnelt und außerdem nicht threadsicher ist.

Wie wählt man aus, wenn in der täglichen Entwicklung String-Spleißen erforderlich ist?

1. Wenn es sich nur um eine einfache Zeichenfolgenverkettung handelt, sollten Sie die direkte Verwendung von „+“ in Betracht ziehen.

2. Wenn die Zeichenfolgenverkettung in einer for-Schleife durchgeführt wird, sollten Sie die Verwendung StringBuildervon and in Betracht ziehen StringBuffer.

3. Wenn es sich Listum ein String-Spleißen handelt, sollten Sie es in Betracht ziehen StringJoiner.

Supongo que te gusta

Origin blog.csdn.net/zy_dreamer/article/details/132350399
Recomendado
Clasificación