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();
Plus de didacticiels vidéo gratuits sur Java : Tutoriel en ligne Java
Fonction Ouvrir un fil avec programmation
new Thread(() -> System.out.println("龙卷风摧毁停车场")).start();
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(); }
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); }
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();
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(); }
@FunctionalInterface
Référence de la méthodeCe 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::println
Les 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"); }
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("接口默认方法执行"); } }
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(); } }
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); } }
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());
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())
推荐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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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)

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 : 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

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é

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.

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 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
