In der String
-Klasse gab es von JDK 12 bis JDK 17 einige nützliche Änderungen und Erweiterungen.
Hier sind die wichtigsten Neuerungen:
- Fügt jeder Zeile des Strings eine Einrückung hinzu oder entfernt sie, wenn der Wert negativ ist.
- Beispiel:
String indented = "Hello\nWorld".indent(4); // Ergebnis: // Hello // World
- Wendet eine gegebene Funktion auf den String an und gibt das Ergebnis zurück.
- Beispiel:
Integer length = "Hello".transform(String::length); // Ergebnis: 5
- Ersetzt Platzhalter im String mit den angegebenen Argumenten, ähnlich wie
String.format()
, jedoch als Instanzmethode. - Beispiel:
String result = "Name: %s, Age: %d".formatted("Alice", 30); // Ergebnis: "Name: Alice, Age: 30"
Seit JDK 12 wurden einige neue Funktionen und Verbesserungen im Zusammenhang mit Collections eingeführt, ie die Arbeit mit Collections erleichtern und effizienter machen. Hier sind die wichtigsten Änderungen:
- Neue Methoden wurden in der
Collectors
-Klasse hinzugefügt:teeing(Collector<T,A,R1>, Collector<T,A,R2>, BiFunction<R1,R2,R>)
: Erlaubt das Sammeln eines Streams in zwei verschiedene Sammlungen und kombiniert deren Ergebnisse.- Beispiel:
var result = Stream.of(1, 2, 3, 4, 5) .collect(Collectors.teeing( Collectors.summingInt(i -> i), // Summe aller Zahlen Collectors.counting(), // Anzahl der Elemente (sum, count) -> sum / count // Durchschnitt ));
Map.ofEntries(Map.Entry<K,V>... entries)
: Ermöglicht das einfache Erstellen von unveränderlichen Maps mit mehreren Einträgen.Map.entry(K key, V value)
: Eine Methode, um Map-Einträge zu erstellen.- Beispiel:
Map<String, Integer> map = Map.ofEntries( Map.entry("a", 1), Map.entry("b", 2) );
- Ab JDK 16 kann bei der Erstellung einer
TreeMap
angegeben werden, wienull
-Werte behandelt werden sollen. - Beispiel:
TreeMap<String, Integer> treeMap = new TreeMap<>(Comparator.nullsFirst(String::compareTo));
Zwischen JDK 12 und JDK 17 gab es in verschiedenen APIs viele bemerkenswerte Änderungen und Erweiterungen. Hier sind einige wichtige Neuerungen in verschiedenen Bereichen:
Files.mismatch(Path, Path)
(seit JDK 12):- Diese Methode vergleicht den Inhalt zweier Dateien und gibt die Position des ersten Unterschieds zurück,
oder
-1
, wenn die Dateien identisch sind. - Beispiel:
long mismatch = Files.mismatch(path1, path2);
- Diese Methode vergleicht den Inhalt zweier Dateien und gibt die Position des ersten Unterschieds zurück,
oder
-
Object.finalize()
(Deprecated seit JDK 16):- Die Methode
finalize()
wurde als veraltet markiert, da sie ineffizient ist und durch alternative Mechanismen wietry-with-resources
und explizites Ressourcenmanagement ersetzt wurde.
- Die Methode
-
Runtime.Version
Verbesserungen (JDK 12):- Neue Methoden wie
Runtime.Version::feature
für das einfache Abrufen der Hauptversion von Java.
- Neue Methoden wie
HttpClient
API (seit JDK 11, aber nennenswerte Verbesserungen in JDK 12-17):- Verbesserungen in der
HttpClient
-API, die nun stabil und produktionsbereit ist. Sie bietet eine einfache Möglichkeit, asynchrone HTTP-Anfragen zu versenden. - Beispiel für GET-Anfrage:
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
- Verbesserungen in der
-
Pattern.asMatchPredicate()
(seit JDK 12):- Erzeugt ein
Predicate<String>
, das überprüft, ob der String das Muster vollständig erfüllt. - Beispiel:
Predicate<String> predicate = Pattern.compile("[a-z]+").asMatchPredicate(); boolean matches = predicate.test("abc"); // true
- Erzeugt ein
-
Comparator
Verbesserungen (seit JDK 12):Comparator
enthält nun eine MethodethenComparingInt(ToIntFunction<? super T>)
, die das Vergleichsverhalten verbessert, indem es einen zusätzlichen Vergleich auf Basis von Ganzzahlen ermöglicht.
-
InstantSource
Interface (seit JDK 17):- Ermöglicht das Abrufen eines aktuellen Zeitpunkts (
Instant
) und kann für Tests oder zeitbasierte Operationen verwendet werden. - Beispiel:
InstantSource source = InstantSource.system(); Instant now = source.instant();
- Ermöglicht das Abrufen eines aktuellen Zeitpunkts (
-
DayPeriodRules
(seit JDK 17):- Ein neues Utility, das für die Handhabung von Tagesperioden (wie "Morgen", "Nachmittag" usw.) verwendet wird.
Stream.toList()
(seit JDK 16):- Diese Methode sammelt die Elemente eines Streams in eine unveränderliche Liste.
Sie ist eine kompaktere Alternative zu
Collectors.toList()
. - Beispiel:
List<String> list = Stream.of("a", "b", "c").toList();
- Diese Methode sammelt die Elemente eines Streams in eine unveränderliche Liste.
Sie ist eine kompaktere Alternative zu
- StandardCharsets.UTF_16 (seit JDK 17):
- Es wurde eine Konstante für UTF_16 in der Klasse
StandardCharsets
eingeführt, was die Arbeit mit diesem Charset vereinfacht. - Beispiel:
String text = "Hello, World!"; byte[] bytes = text.getBytes(StandardCharsets.UTF_16);
- Es wurde eine Konstante für UTF_16 in der Klasse
-
VarHandle
-Erweiterungen (seit JDK 14):- Verbesserungen in der
VarHandle
API, die nuncompareAndExchange
,getAndSet
und weitere atomare Operationen auf Arrays und Objekten bietet.
- Verbesserungen in der
-
MethodHandles::privateLookupIn
(seit JDK 12):- Diese Methode erlaubt es, auf private Methoden und Felder über
MethodHandles.Lookup
zuzugreifen, wenn eine Erlaubnis besteht. - Beispiel:
MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(SomeClass.class, MethodHandles.lookup());
- Diese Methode erlaubt es, auf private Methoden und Felder über