Maison  >  Article  >  Java  >  API Stream en Java 8 : Comment collecter une collection en tant qu'objet Map à l'aide de la méthode collect()

API Stream en Java 8 : Comment collecter une collection en tant qu'objet Map à l'aide de la méthode collect()

WBOY
WBOYoriginal
2023-07-31 15:24:191856parcourir

La nouvelle API Stream a été introduite dans Java 8, qui offre un moyen plus efficace et plus concis de traiter les données de collecte. L'API Stream fournit diverses méthodes pour traiter et transformer les données, parmi lesquelles la méthode collect() est l'une des méthodes les plus importantes et les plus couramment utilisées. Cet article décrit comment utiliser la méthode collect() pour collecter une collection dans un objet Map et fournit des exemples de code correspondants. collect() 方法是一个非常重要且常用的方法之一。本文将介绍如何使用 collect() 方法将集合收集为 Map 对象,并提供相应的代码示例。

在 Java 8 之前,如果我们想将一个集合转换为 Map 对象,需要使用繁琐的遍历和添加操作。而在 Java 8 中使用 Stream API 的 collect() 方法可以更加方便地实现这个目标。

collect() 方法是 Stream API 的终止操作之一,它接收一个 Collector 参数,用于指定收集的方式。在收集为 Map 对象时,我们可以使用 Collectors.toMap() 方法来进行收集。

下面是使用 collect() 方法将集合收集为 Map 对象的示例代码:

import java.util.*;
import java.util.stream.Collectors;

public class StreamCollectExample {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "orange");

        Map<String, Integer> fruitLengthMap = fruits.stream()
                .collect(Collectors.toMap(
                        fruit -> fruit,                   // Key 映射函数
                        fruit -> fruit.length()           // Value 映射函数
                ));

        System.out.println(fruitLengthMap);
    }
}

上述代码中,我们首先创建了一个包含三个水果的集合 fruits,然后通过 stream() 方法将其转换为一个流。接着使用 collect() 方法并传入 Collectors.toMap() 方法作为参数,该方法接收两个 lambda 表达式参数,用于指定 Key 和 Value 的映射函数。

在我们的示例中,Key 映射函数是 fruit -> fruit,即将水果作为 Key;Value 映射函数是 fruit -> fruit.length(),即将水果的长度作为 Value。最后,collect() 方法将流中的元素按照指定的映射函数进行处理,并返回一个 Map 对象。

输出结果如下:

{orange=6, banana=6, apple=5}

可以看到,最终我们获得了一个包含水果及其长度的 Map 对象。

除了基本的收集功能,Collectors.toMap() 方法还提供了一些其他的参数。例如,我们可以指定当存在重复的 Key 时应该如何处理,通过传入一个合并函数来解决冲突。

下面是一个带有 Key 冲突处理的示例代码:

import java.util.*;
import java.util.stream.Collectors;

public class StreamCollectExample {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "orange", "apple");

        Map<String, Integer> fruitLengthMap = fruits.stream()
                .collect(Collectors.toMap(
                        fruit -> fruit,                   // Key 映射函数
                        fruit -> fruit.length(),          // Value 映射函数
                        (length1, length2) -> length1    // Key 冲突处理函数
                ));

        System.out.println(fruitLengthMap);
    }
}

在上述代码中,我们在 toMap() 方法的第三个参数位置上传入了一个合并函数 (length1, length2) -> length1。该函数会在遇到重复的 Key 时选择保留第一个 Key,并忽略后续的 Key。

输出结果如下:

{orange=6, banana=6, apple=5}

可以看到,在 Key 冲突时,只保留了第一个出现的 Key,其他的 Key 被忽略。

通过使用 Stream API 的 collect() 方法,我们可以非常方便地将集合收集为 Map 对象,并且还可以自定义 Key 和 Value 的映射函数以及处理冲突的方式。这样我们能够更加灵活地处理集合数据,提高代码的可读性和效率。

以上就是关于 Java 8 中使用 collect()

Avant Java 8, si nous voulions convertir une collection en un objet Map, nous devions utiliser des opérations fastidieuses de parcours et d'addition. Dans Java 8, cet objectif peut être atteint plus facilement en utilisant la méthode collect() de l'API Stream. 🎜🎜La méthode collect() est l'une des opérations de terminaison de l'API Stream. Elle reçoit un paramètre Collector pour spécifier la méthode de collecte. Lors de la collecte en tant qu'objet Map, nous pouvons utiliser la méthode Collectors.toMap() pour collecter. 🎜🎜Ce qui suit est un exemple de code qui utilise la méthode collect() pour collecter une collection dans un objet Map : 🎜rrreee🎜Dans le code ci-dessus, nous créons d'abord une collection fruits qui contient le code de trois fruits>, puis convertissez-le en flux via la méthode <code>stream(). Utilisez ensuite la méthode collect() et transmettez la méthode Collectors.toMap() en tant que paramètre. Cette méthode reçoit deux paramètres d'expression lambda pour spécifier le mappage de Key et Value. . fonction. 🎜🎜Dans notre exemple, la fonction de mappage de clé est fruit -> fruit, c'est-à-dire que le fruit est utilisé comme clé ; la fonction de mappage de valeur est fruit -> ) , c'est-à-dire que la longueur du fruit est prise comme valeur. Enfin, la méthode collect() traite les éléments du flux selon la fonction de mappage spécifiée et renvoie un objet Map. 🎜🎜Le résultat de sortie est le suivant : 🎜rrreee🎜Comme vous pouvez le voir, nous avons finalement obtenu un objet Map contenant le fruit et sa longueur. 🎜🎜En plus de la fonction de collection de base, la méthode Collectors.toMap() fournit également d'autres paramètres. Par exemple, nous pouvons spécifier ce qui doit être fait lorsqu'il y a des clés en double, en passant une fonction de fusion pour résoudre les conflits. 🎜🎜Ce qui suit est un exemple de code avec gestion des conflits de clés : 🎜rrreee🎜Dans le code ci-dessus, nous avons passé une fonction de fusion à la troisième position du paramètre de la méthode <code>toMap() (longueur1 , longueur2) -> longueur1. Cette fonction choisira de conserver la première clé lorsqu'elle rencontrera des clés en double et d'ignorer les clés suivantes. 🎜🎜Le résultat de sortie est le suivant : 🎜rrreee🎜Vous pouvez voir que lorsqu'un conflit de clé se produit, seule la première clé qui apparaît est conservée et les autres clés sont ignorées. 🎜🎜En utilisant la méthode collect() de l'API Stream, nous pouvons très facilement collecter la collection en tant qu'objet Map, et nous pouvons également personnaliser les fonctions de mappage de Key et Value et la manière de gérer conflits. De cette manière, nous pouvons traiter les données de collecte de manière plus flexible et améliorer la lisibilité et l’efficacité du code. 🎜🎜Ce qui précède est l'introduction et un exemple de code sur l'utilisation de la méthode collect() pour collecter des collections dans des objets Map dans Java 8. J'espère que cet article pourra vous aider à comprendre l'utilisation de l'API Stream. 🎜

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