Vielleicht ist das sehr einfach, aber ich bin ein Neuling in Java 8-Funktionen und weiß nicht, wie ich das erreichen soll. Ich habe diese einfache Zeile, die den folgenden Text enthält:
"Schlüssel, Name"
und ich möchte diese Zeile in ein String-Array konvertieren und jeden Wert durch das Komma (,) trennen. Ich möchte jedoch auch jedes Feld kürzen, bevor ich das endgültige Array zurückgebe.
Arrays.stream(line.split(",")).map(String::trim).toArray();
Dies gibt jedoch ein Object [] -Array anstelle eines String [] -Arrays zurück. Bei weiterer Prüfung kann ich bestätigen, dass es sich bei dem Inhalt tatsächlich um String-Instanzen handelt, das Array selbst jedoch aus Objektelementen besteht. Lassen Sie mich dies veranschaulichen. Dies sagt der Debugger über das zurückgegebene Objekt:
Object[]:
0 = (String) "Key"
1 = (String) "Name"
Soweit ich das beurteilen kann, liegt das Problem im Rückgabetyp des Map-Aufrufs, aber wie kann ich dafür sorgen, dass ein String [] -Array zurückgegeben wird?
quelle
String[]::new
Methodenreferenz tut und wie ich dasselbe mit einem regulären Lambda-Ausdruck tun kann? (Ich sehe, dass es einen "Wert" vom Typ int ergibt, aber es macht für mich keinen Sinn).size
" anstelle von "value
" zu benennen , daher ist die Bedeutung offensichtlich.trim
Schritt veraltet, wenn Sie den Leerraum zum Teil des Trennzeichens machen, z. B.line.split("\\s*,\\s*")
weil er überhaupt nicht in den Ergebniszeichenfolgen enthalten ist. Dann brauchen Sie den Stream-Vorgang überhaupt nicht :String[] result=line.split("\\s*,\\s*");
. Oder Sie können verwendenString[] result=line.split(","); Arrays.asList(result).replaceAll(String::trim);
. Sie brauchen nicht für jede Aufgabe einen Stream…String[]::new
ist eine Funktion, die dienew
"Pseudomethode" für denString[]
TypString::trim
aufruft, genau wie eine Funktion, die die realetrim
Methode des String-Typs aufruft . DerString::new
von toArray an die Funktion übergebene Wert entspricht der Größe der Auflistung auf der rechten Seite des Methodenaufrufs .toArray ().Wenn Sie ersetzt
String[]::new
mitn->new String[n]
Ihnen könnte mit der Syntax bequemer wie Sie ersetzen könntenString::trim
mit dem weniger kühlens->s.trim()
quelle