Changements de Java 8 à Java 11

Java 8 à Java 11

http://openjdk.java.net/projects/jdk9/ http://cr.openjdk.java.net/~iris/se/9/latestSpec/apidiffs/overview-summary.html

https://openjdk.java.net/projects/jdk/10/ http://cr.openjdk.java.net/~iris/se/10/latestSpec/apidiffs/overview-summary.html

https://openjdk.java.net/projects/jdk/11/ http://cr.openjdk.java.net/~iris/se/11/latestSpec/apidiffs/overview-summary.html

Langue

Le premier est le changement de langue.

var http://openjdk.java.net/jeps/286 Vous pouvez maintenant taper infer sur les variables locales.

var a = "Foo";

Je pense que ce qui suit est une bonne ligne directrice.

--Il est préférable d'utiliser var pour ceux avec des types sur le côté droit tels que new et List.of (autre que ʻInteger, Long`, etc.)

Lorsque vous utilisez une variable de la classe wrapper, elle gère null, donc je pense qu'il est préférable de spécifier le type. Si vous n'utilisez pas null, utilisez le type de base. Lorsqu'il est appliqué à l'élément 1, le style d'écriture suivant est OK.

var count = Long.valueOf("123");

Cependant, pour les méthodes ʻIntegeretLong, il y en a qui renvoient le type de base et d'autres qui renvoient le type wrapper, il est donc plus sûr de spécifier le type. Si vous le recevez avec var`, il vaut mieux en faire un type de base.

private interface methods http://openjdk.java.net/jeps/213

Vous pouvez maintenant utiliser des méthodes privées pour l'interface.

Puisque la méthode statique et la méthode par défaut peuvent être utilisées dans Java8, le traitement commun peut être écrit en private.

effective final in try-with-resource http://openjdk.java.net/jeps/213

Il est maintenant possible de spécifier uniquement des variables avec try-with-resource pour les variables pratiquement finales. Jusqu'à présent, si vous vouliez fermer automatiquement une variable Closable définie à l'extérieur de try avec try-with-resource, vous deviez l'assigner à une autre variable. Par exemple, si vous souhaitez l'utiliser enfin, vous devez définir une variable en dehors de try, mais vous pouvez l'utiliser dans un tel cas.

var io = new InputStream();
try (var io2 = io) {
  ...
}

var io = new InputStream();
try (io) {
  ...
}

<> in anonymous Les classes anonymes peuvent désormais être inférées de type avec l'opérateur losange.

List<String> strs = new ArrayList<>() {{
  this.add("aa");
  this.add("bb");
}};

_ Indisponible

Vous ne pouvez plus utiliser «_» comme variable.

API

À partir de là, nous résumerons les modifications apportées à la bibliothèque standard pour chaque classe.

Cliquez ici pour l'API Java 11 https://nowokay.hatenablog.com/entry/20180704/1530712754

java.lang

String Compact String http://openjdk.java.net/jeps/254 Il est inclus dans Java 9. Jusqu'à Java8, les caractères étaient conservés sous forme de char en UTF-16, donc 2 octets étaient utilisés pour chaque caractère, mais les chaînes de caractères contenant uniquement des caractères ASCII tels que les alphabets et les nombres sont désormais conservées dans 1 octet.

Indy String concatenation http://openjdk.java.net/jeps/280

Jusqu'à présent, la concaténation de chaînes avec + a été étendue à StringBuilder, mais elle sera confirmée lors de l'exécution avec Invoke Dynamic.

"aa"+ a

new StringBuilder("aa").append(a);

↓ Dynamic Invoke

repeat(n) Peut être répété

jshell> "test".repeat(3)
$1 ==> "testtesttest"

isBlank()

isBlank est un caractère d'espace UTF

strip() / stripLeading() / stripTrailing()

Version UTF de trim () / trimLeft () / trimRight ()

lines()

Renvoie un flux de chaînes pour chaque saut de ligne

"test\nprogram\n".lines()
  .map(String::strip)
  .collect(Collectors.joining("\n")

En faisant cela, l'espace avant et après chaque ligne peut être supprimé.

java.util

List/Set/Map of http://openjdk.java.net/jeps/269

Renvoie une collection immuable

var strs = List.of("apple", "banana");
var sets = Set.of("apple", "banana");
var dict = Map.of(
  "apple", "pomme",
  "banana", "banane");

copyOf Renvoie une copie immuable

Map ofEntries() / entry()

Non seulement ʻofmais aussi ʻofEntries ()ont été ajoutés à la carte.

var map = Map.ofEntries(
  entry("key1", "value1"),
  entry("key2", "value2"));

Predicate not

Inversion pratique de la référence de méthode

lines.stream()
  .filter(not(String::isEmpty))
  .forEach(System.out::println);

Collection toArray(IntFunction)

Lors de la conversion de List, etc. en tableau, il était nécessaire de préparer un tableau de même taille à l'avance, mais vous pouvez générer un tableau comme strs.toArray (String [] :: new)

Stream dropWhile / takeWhile

Dans Java 8, le traitement de flux tel que "du début à la fin dans les données" n'était pas possible, mais il peut être implémenté en utilisant dropWhile / takeWhile introduit dans Java 9.

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
start
two
three

Dans ce cas, il contient jusqu'à start, vous devez donc l'ignorer.

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> skip(1).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
two
three

ofNullable

iterate

Irate avec deux arguments est disponible depuis Java8, mais il était nécessaire de définir une condition d'arrêt avec limite etc.

IntStream.iterate(0, i -> i + 3).limit(5)
  .forEach(System.out::println);

Je n'avais pas non plus takeWhile, donc c'était assez difficile à utiliser. Et maintenant, vous pouvez utiliser ʻiterate en combinaison avec takeWhile`. Vous pouvez donc l'utiliser comme une instruction for.

IntStream.iterate(0, i -> i < 10, i -> i + 3)
  .forEach(System.out::println);

Si vous écrivez ceci de la manière suivante, il ne reviendra pas. Pensez pourquoi.

IntStream.iterate(0, i -> i < 10, i -> i++)
  .forEach(System.out::println);

je peux le faire

IntStream.iterate(0, i -> i < 10, i -> ++i)
  .forEach(System.out::println);

Optional/OptionalInt/OptionalLong/OptionalDouble orElseThrow() isEmpty() stream()

La conversion d'Optionnel en Stream n'a jamais été aussi simple. Cela élimine le besoin d'insérer un filter (Optional :: isPresent) quand un Optional revient dans un Stream. Par exemple, si getById renvoie facultatif

ids.map(Data::getById)
   .filter(Optional::isPresent)
   .collect(Collectors.toList())

Ce que je faisais

ids.flatMap(id -> getById(id).stream())
   .collect(Collectors.toList())

Vous pourrez écrire avec flatMap comme ça.

ifPresentOrElse or

Si facultatif est vide, il est plus facile d'écrire quelque chose comme le suivant facultatif.

Collectors toUnmodifiableList / toUnmodifiableSet / toUnmodifiableMap

Collecteur qui stocke les valeurs dans des collections immuables

filtering flatMapping

Enumeration asIterator

Objects requireNonNullElse requireNonNullElseGet

java.io

Path of

Files writeString

Le processus d'écriture de texte dans un fichier se fait sur une seule ligne.

readString

Le processus de lecture de texte à partir d'un fichier se fait sur une seule ligne.

Reader transferTo

L'écriture du contenu lu par Reader tel qu'il est dans Writer est une ligne

nullReader Writer nullWriter

InputStream transferTo

L'écriture du contenu lu par InputStream tel quel dans OutputStream est une ligne

nullInputStream

OutputStream nullOutputStream

java.net.http

L'accès HTTP a été repensé.

JVM

Log http://openjdk.java.net/jeps/158 http://openjdk.java.net/jeps/271

G1GC is the default GC http://openjdk.java.net/jeps/248

ZGC

CMS is deprecated http://openjdk.java.net/jeps/291

Ahead of time compilation http://openjdk.java.net/jeps/295

une fonction

JShell http://openjdk.java.net/jeps/222

Launch Single-File Source-Code Programs

Vous pouvez maintenant exécuter un code Java source unique avec des commandes java sans le compiler avec javac.

Module System

Java EE and CORBA is dropped

Recommended Posts

Changements de Java 8 à Java 11
Somme de Java_1 à 100
De Java à Ruby !!
Migration de Cobol vers JAVA
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
De Java inefficace à Java efficace
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste
Java, interface pour partir du débutant
La route de JavaScript à Java
[Java] Conversion d'un tableau à une liste
Changements dans Java 11
[Java] Introduction à Java
Introduction à Java
Convertir l'heure UTC Java en heure JST
Connectez-vous de Java à MySQL à l'aide d'Eclipse
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
De l'installation d'Eclipse à l'exécution de Java (PHP)
Publier sur Slack à partir de Play Framework 2.8 (Java)
Java: Comment envoyer des valeurs du servlet au servlet
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
[Java] Flux du code source à l'exécution
Introduction à la surveillance à partir de Java Touching Prometheus
Précautions lors de la migration de VB6.0 vers JAVA
Mémo pour la migration de Java vers Kotlin
Conversion de type du type java Big Decimal au type String
Appeler Java depuis JRuby
[Java] De deux listes à une liste de tableaux
Upsert du SDK Java vers Azure Cosmos DB
Exécuter R à partir de Java Je veux exécuter rJava
Migrer de JUnit 4 vers JUnit 5
Connectez-vous à Aurora (MySQL) depuis une application Java
Pour devenir programmeur VB.net depuis une boutique Java
Évaluer la source Java à partir de Java
[Java] Connectez-vous à MySQL
Migrer de Java vers Kotlin côté serveur + Spring-boot
Comment obtenir une classe depuis Element en Java
Accédez à API.AI depuis Java
Améliorations de Kotlin à Java
[Java] Comment passer de jdk ouvert à jdk oracle
Je veux écrire rapidement de java vers sqlite
Introduction à la commande java
Développement de serveur Minecraft BE de PHP à Java
Sélectionnez * de Java SDK vers Azure Cosmos DB
Lancez Docker à partir de Java pour convertir des documents Office en PDF
Convertir l'énumération Java et JSON vers et depuis Jackson
[Java] Je souhaite calculer la différence par rapport à la date
Comment passer d'Eclipse Java à un fichier SQL
Comment écrire Scala du point de vue de Java
[Java] Comment extraire le nom du fichier du chemin
6 fonctionnalités que j'ai manquées après mon retour de Scala à Java
Comment passer d'Oracle Java 8 à Adopt Open JDK 9
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
Générer des modèles de JSON à Swift, PHP, C #, JAVA
[Java] Plates-formes parmi lesquelles choisir pour le développement Java à partir de maintenant (2020)
Passé d'iBATIS à MyBatis3
Essayez Spring Boot de 0 à 100.
[Java] Comment utiliser Map