Maison Java Javacommencer Introduction détaillée aux nouvelles fonctionnalités du JDK8

Introduction détaillée aux nouvelles fonctionnalités du JDK8

Nov 26, 2019 pm 01:45 PM
jdk8 新特性

Introduction détaillée aux nouvelles fonctionnalités du JDK8

Programmation fonctionnelle

L'orientation objet souligne que "tout est un objet". pour le faire avec. La réflexion sur la programmation fonctionnelle met l'accent sur « quoi faire » plutôt que sur « comment le faire ».

Fil d'ouverture ordinaire

// 匿名内部类对象
Runnable task = new Runnable() {
    @Override
    public void run() {
        System.out.println("乌鸦坐飞机");
    }
};
new Thread(task).start();
Copier après la connexion

Plus de didacticiels vidéo gratuits sur Java : Tutoriel en ligne Java

Fonction Ouvrir un fil avec programmation

new Thread(() -> System.out.println("龙卷风摧毁停车场")).start();
Copier après la connexion

Les parenthèses devant : paramètres de méthode S'il n'y a pas de paramètres, écrivez () La flèche pointe vers ce qui doit être fait plus tard. attelle corporelle, qui représente le spécifique Que faire.

Expression Lambda

L'expression Lambda, également connue sous le nom de fermeture, est la nouvelle fonctionnalité la plus importante à l'origine de la sortie de Java 8.

Lambda permet de passer des fonctions en tant que paramètres d'une méthode (les fonctions sont passées en méthodes en tant que paramètres). L'utilisation d'expressions lambda peut rendre votre code plus concis et compact.

Trois éléments : paramètres, flèches, code

Format : (nom du paramètre de type de paramètre) -> Le principe de la formule : il doit y avoir une interface et il doit y avoir une et une seule méthode abstraite dans l'interface

Démonstration : Écrivez une interface Cook, et il y a une méthode makeFood() dans l'interface

public static void main(String[] args) {
    method(() -> {
        System.out.println("闪刀启动!");
    });
}
 
private static void method(Cook cook) {
    cook.makeFood();
}
Copier après la connexion

Expression Lambda Règles d'omission de formule :

Le type de paramètre peut être omis. Mais vous ne pouvez omettre que les types de tous les paramètres en même temps, ou ne pas les omettre du tout. S'il y a un et un seul paramètre, alors les parenthèses peuvent être omises. S'il y a une et une seule instruction entre les accolades, alors, qu'il y ait ou non une valeur de retour, return, accolades, les parenthèses et les points-virgules peuvent être omis.

    public static void main(String[] args) {
        method((a, b)-> a + b);
    }
 
    private static void method(Calculator calculator) {
        int result = calculator.sum(1234, 9876);
        System.out.println(result);
    }
Copier après la connexion

Lorsque vous créez une interface, vous pouvez également utiliser des expressions lambda au lieu de classes internes anonymes

Runnable task = () -> System.out.println("闪刀启动!");
new Thread(task).start();
Copier après la connexion

Interface fonctionnelle

L'interface a et Il y a une seule méthode abstraite, appelée interface fonctionnelle.

Il y a une nouvelle annotation

dans JDK8, qui est utilisée pour détecter si une interface est une interface fonctionnelle. S'il ne s'agit pas d'une interface fonctionnelle, une erreur sera signalée lors de la compilation. L'annotation @FunctionalInerface est facultative Même si cette annotation n'est pas utilisée, tant que l'interface répond aux exigences de définition d'une interface fonctionnelle, elle reste une interface fonctionnelle.

@FunctionalInterface
public interface MyInterface {
    void method();
}
Copier après la connexion
@FunctionalInterface

Référence de la méthode

Ce code peut en fait être abrégé.

Printer printer = (str) -> System.out.println(str);Tant qu'il est déductible, il est référençable, donc passer des paramètres n'a pas vraiment de sens, donc ici vous pouvez réellement utiliser des références de méthode pour abréger

System.out::printlnÀ partir de java8, un L'expression dans l'opérateur new, l'opérateur de référence de méthode (deux deux-points écrits successivement), est une référence de méthode. L'essence de la référence de méthode et de Lambda est exactement la même, et le but est de simplifier l'écriture des expressions Lambda.

Méthode d'écriture Lambda :

s->System.out.println(s)Méthode d'écriture de référence de méthode :

System.out::printlnLes deux méthodes d'écriture sont complètement équivalentes

 
    public static void main(String[] args) {
        method(System.out::println);
    }
 
    private static void method(Printer printer) {
        printer.print("hello");
    }
Copier après la connexion

Interface

méthode par défaut

L'interface avait à l'origine deux méthodes abstraites, mais elle doit maintenant être transformée en trois méthodes abstraites. la classe doit également implémenter une nouvelle méthode.

Lorsqu'il y a trop de classes d'implémentation, il est très difficile à utiliser. Le JDK utilisait le mode de conception ouvert-fermé : ouvert pour les extensions et fermé pour les modifications. C'est-à-dire : créer une nouvelle interface, hériter de l'interface d'origine et définir de nouvelles méthodes. Cependant, dans ce cas, les classes d'implémentation d'origine n'ont pas de nouvelles méthodes pour le moment, la méthode par défaut de l'interface peut être utilisée.

Le mot-clé est modifié avec default et la méthode nécessite un corps de méthode. Toutes les sous-classes d'une telle méthode seront implémentées par défaut (vous n'avez pas besoin de l'écrire vous-même). Si vous souhaitez la remplacer, vous pouvez également la remplacer dans la classe d'implémentation

/**
 * 从java8开始,接口当中允许定义default默认方法
 * 修饰符:public default(public可以省略,default不能省略)
 */
public interface MyInterface {
 
    void method1();
 
    void method2();
 
    default void methodNew() {
        System.out.println("接口默认方法执行");
    }
 
}
Copier après la connexion

Remarque. : La méthode par défaut dans l'interface est équivalente. Donc un nouveau mot-clé et le "par défaut" des quatre modificateurs ne sont pas le même concept.

L'utilisation du mot-clé par défaut peut permettre au programme d'obtenir l'effet « d'héritage multiple ».

Méthode statique

À partir de Java8, les méthodes statiques peuvent être définies dans les interfaces et leur utilisation est la même que celle des méthodes statiques des classes générales.

public interface Animal {
 
    void eat();
 
    static Animal getAnimal() {
        return new Cat();
    }
}
Copier après la connexion

Opération de streaming

La première impression que le traitement de streaming donne aux développeurs est qu'il rend les opérations de collecte beaucoup plus simples. Habituellement, nous avons besoin de plusieurs lignes de code pour terminer l'opération. être implémenté sur une seule ligne à l’aide du traitement en streaming.

Par exemple, si nous voulons filtrer tous les nombres pairs d'une collection contenant des entiers et les encapsuler dans une nouvelle liste pour le retour, alors avant java8, nous devons l'implémenter via le code suivant :

Pour une collection de nombres :

List<Integer> evens = new ArrayList<>();
for (final Integer num : nums) {
    if (num % 2 == 0) {
        evens.add(num);
    }
}
Copier après la connexion

Grâce au traitement de streaming de Java8, nous pouvons simplifier le code en :

List<Integer> evens = nums.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
Copier après la connexion

Expliquons brièvement la signification de la ligne d'instruction ci-dessus, stream() opération Convertissez la collection en flux, filter() effectue notre processus de filtrage personnalisé, ici nous filtrons tous les nombres pairs via des expressions lambda, et enfin nous encapsulons les résultats via collect() et les spécifions via Collectors.toList() Encapsulé dans un Liste de collecte et retournée.

常用操作案例:

        //初始化list集合
        List<String> list = new ArrayList<String>();
        list.add("测试数据1");
        list.add("测试数据2");
        list.add("测试数据3");
        list.add("测试数据12");
        
        //使用λ表达式遍历集合
        list.forEach(s -> System.out.println(s));
        
        //结合Predicate使用和过滤条件筛选元素
        Predicate<String> contain1 = n -> n.contains("1");
        Predicate<String> contain2 = n -> n.contains("2");
        
        //根据条件遍历集合
        list.stream().filter(contain1).forEach(n -> System.out.println(n));
        list.stream().filter(s -> contain1.test(s)).forEach(s -> System.out.println(s));
        list.stream().filter(contain1.and(contain2)).forEach(n -> System.out.println(n));
        list.stream().filter(contain1.or(contain2)).forEach(n -> System.out.println(n));
        
        //将过滤后的元素重新放到一个集合中
        List<String> newList = list.stream().filter(contain1.and(contain2)).collect(Collectors.toList());
        
集合中decimal求和
		BigDecimal sum = list
				.stream()
				.map(Person::getAmount)
				.reduce(BigDecimal::add)
				.get();
 
//排序 , 也需要新的集合接收
	List<Student> resultList = new ArrayList<Student>();
	resultList = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList())
Copier après la connexion

推荐java相关文章:java零基础入门

欢迎大家一起来学习!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Nov 27, 2023 pm 12:52 PM

Sortie de PHP8.3 : aperçu des nouvelles fonctionnalités À mesure que la technologie continue de se développer et que les besoins évoluent, les langages de programmation sont constamment mis à jour et améliorés. En tant que langage de script largement utilisé dans le développement Web, PHP s'est constamment amélioré pour offrir aux développeurs des outils plus puissants et plus efficaces. La version PHP 8.3 récemment publiée apporte de nombreuses nouvelles fonctionnalités et améliorations tant attendues. Jetons un coup d'œil à ces nouvelles fonctionnalités. Initialisation des propriétés non nulles Dans les versions précédentes de PHP, si une propriété de classe ne se voyait pas explicitement attribuer une valeur, sa valeur

Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Dec 23, 2023 pm 01:16 PM

Une analyse approfondie des nouvelles fonctionnalités de PHP8 pour vous aider à maîtriser les dernières technologies Au fil du temps, le langage de programmation PHP n'a cessé d'évoluer et de s'améliorer. La version PHP8 récemment publiée offre aux développeurs de nombreuses nouvelles fonctionnalités et améliorations intéressantes, apportant plus de commodité et d'efficacité à notre travail de développement. Dans cet article, nous analyserons en profondeur les nouvelles fonctionnalités de PHP8 et fournirons des exemples de code spécifiques pour vous aider à mieux maîtriser ces dernières technologies. Le compilateur JIT PHP8 introduit la compilation JIT (Just-In-Time)

Quelles sont les nouvelles fonctionnalités de php8 Quelles sont les nouvelles fonctionnalités de php8 Sep 25, 2023 pm 01:34 PM

Les nouvelles fonctionnalités de php8 incluent le compilateur JIT, la déduction de type, les paramètres nommés, les types d'union, les propriétés, les améliorations de la gestion des erreurs, la prise en charge de la programmation asynchrone, les nouvelles fonctions de bibliothèque standard et les extensions de classe anonymes. Introduction détaillée : 1. Compilateur JIT, PHP8 introduit le compilateur JIT, ce qui constitue une amélioration importante des performances. Le compilateur JIT peut compiler et optimiser certains codes d'exécution à haute fréquence en temps réel, améliorant ainsi la vitesse d'exécution. 2. Dérivation de type, PHP8 ; introduit la fonction d'inférence de type, permettant aux développeurs de déduire automatiquement le type de variables lors de la déclaration des variables, etc.

Interprétation des nouvelles fonctionnalités du langage Go : rendre la programmation plus efficace Interprétation des nouvelles fonctionnalités du langage Go : rendre la programmation plus efficace Mar 10, 2024 pm 12:27 PM

[Interprétation des nouvelles fonctionnalités du langage Go : pour rendre la programmation plus efficace, des exemples de code spécifiques sont nécessaires] Ces dernières années, le langage Go a attiré beaucoup d'attention dans le domaine du développement logiciel, et son concept de conception simple et efficace a attiré de plus en plus développeurs. En tant que langage de programmation typé statiquement, le langage Go continue d'introduire de nouvelles fonctionnalités pour améliorer l'efficacité du développement et simplifier le processus d'écriture de code. Cet article fournira une explication détaillée des dernières fonctionnalités du langage Go et expliquera comment profiter de la commodité apportée par ces nouvelles fonctionnalités à travers des exemples de code spécifiques. Développement modulaire (GoModules) Go langage à partir de 1

Un aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir des effets de transition Un aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir des effets de transition Sep 09, 2023 am 11:27 AM

Aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir des effets de transition CSS3 est la dernière version de CSS Parmi les nombreuses nouvelles fonctionnalités, la plus intéressante et la plus pratique devrait être l'effet de transition. Les effets de transition peuvent rendre nos pages plus fluides et plus belles lors de l'interaction, offrant aux utilisateurs une bonne expérience visuelle. Cet article présentera l'utilisation de base des effets de transition CSS3, avec des exemples de code correspondants. Attribut transition-property : spécifiez l'effet de transition de la propriété CSS qui doit être transitionné

Nouvelle extension Redis introduite dans PHP8.1 Nouvelle extension Redis introduite dans PHP8.1 Jul 07, 2023 pm 09:41 PM

La nouvelle extension Redis introduite dans PHP8.1 Avec le développement rapide d'Internet, une grande quantité de données doit être stockée et traitée. Afin d’améliorer l’efficacité et les performances du traitement des données, la mise en cache est devenue un élément indispensable. Dans le développement PHP, Redis, en tant que système de stockage clé-valeur hautes performances, est largement utilisé dans les scénarios de mise en cache et de stockage de données. Afin d'améliorer encore l'expérience d'utilisation de Redis en PHP, PHP8.1 introduit une nouvelle extension Redis. Cet article présentera les nouvelles fonctions de cette extension et fournira.

Quelles sont les nouveautés du langage go ? Quelles sont les nouveautés du langage go ? Aug 24, 2023 pm 01:36 PM

Les nouvelles fonctionnalités du langage Go sont : 1. Le module Go, utilisé pour gérer les dépendances des projets en langage Go ; 2. La gestion des erreurs, ajoutant un nouveau type d'erreur, rendant la gestion des erreurs plus flexible et concise 3. Le package de contexte, utilisé ; pour transmettre les valeurs de plage de requête entre les goroutines ; 4. Incorporation, c'est-à-dire qu'une structure peut être intégrée dans une autre structure ; 5. Package de synchronisation, pour mieux contrôler la synchronisation et la communication entre les goroutines ; types d'erreurs ; 7. Les génériques permettent aux développeurs d'écrire de manière plus flexible.

Aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir une mise en page centrée horizontalement Aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir une mise en page centrée horizontalement Sep 09, 2023 pm 04:09 PM

Aperçu des nouvelles fonctionnalités de CSS3 : Comment utiliser CSS3 pour obtenir une mise en page centrée horizontalement Dans la conception et la mise en page Web, une mise en page centrée horizontalement est une exigence courante. Dans le passé, nous utilisions souvent des astuces JavaScript ou CSS complexes pour y parvenir. Cependant, CSS3 a introduit de nouvelles fonctionnalités qui rendent les mises en page centrées horizontalement plus simples et plus flexibles. Cet article présentera quelques nouvelles fonctionnalités de CSS3 et fournira quelques exemples de code pour montrer comment utiliser CSS3 pour obtenir une mise en page centrée horizontalement. 1. Utilisez flexbox pour mettre en page le fichier

See all articles