Heim  >  Artikel  >  Java  >  Stream-API in Java 8: So sammeln Sie eine Sammlung als Kartenobjekt mit der Methode „collect()“.

Stream-API in Java 8: So sammeln Sie eine Sammlung als Kartenobjekt mit der Methode „collect()“.

WBOY
WBOYOriginal
2023-07-31 15:24:191852Durchsuche

Die neue Stream-API wurde in Java 8 eingeführt, die eine effizientere und präzisere Möglichkeit zur Verarbeitung von Erfassungsdaten bietet. Die Stream-API bietet verschiedene Methoden zum Verarbeiten und Transformieren von Daten, unter denen die Methode collect() eine der wichtigsten und am häufigsten verwendeten Methoden ist. In diesem Artikel wird beschrieben, wie Sie mit der Methode collect() eine Sammlung in einem Map-Objekt sammeln und entsprechende Codebeispiele bereitstellen. 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()

Wenn wir vor Java 8 eine Sammlung in ein Map-Objekt konvertieren wollten, mussten wir langwierige Durchlauf- und Additionsoperationen verwenden. In Java 8 kann dieses Ziel bequemer mit der Methode collect() der Stream-API erreicht werden. 🎜🎜Die collect()-Methode ist eine der Beendigungsoperationen der Stream-API. Sie empfängt einen Collector-Parameter, um die Erfassungsmethode anzugeben. Beim Sammeln als Kartenobjekt können wir zum Sammeln die Methode Collectors.toMap() verwenden. 🎜🎜Das Folgende ist ein Beispielcode, der die Methode collect() verwendet, um eine Sammlung in einem Map-Objekt zu sammeln: 🎜rrreee🎜Im obigen Code erstellen wir zunächst eine Sammlung Früchte das drei Früchte enthält Code>, und konvertieren Sie ihn dann über die Methode <code>stream() in einen Stream. Verwenden Sie dann die Methode collect() und übergeben Sie die Methode Collectors.toMap() als Parameter. Diese Methode empfängt zwei Lambda-Ausdrucksparameter, um die Zuordnung von Schlüssel und Wert anzugeben . Funktion. 🎜🎜In unserem Beispiel ist die Schlüsselzuordnungsfunktion fruit -> ) , d. h. die Länge der Frucht wird als Wert genommen. Schließlich verarbeitet die Methode collect() die Elemente im Stream gemäß der angegebenen Zuordnungsfunktion und gibt ein Map-Objekt zurück. 🎜🎜Das Ausgabeergebnis lautet wie folgt: 🎜rrreee🎜Wie Sie sehen können, haben wir schließlich ein Map-Objekt erhalten, das die Frucht und ihre Länge enthält. 🎜🎜Zusätzlich zur grundlegenden Sammlungsfunktion stellt die Methode Collectors.toMap() auch einige andere Parameter bereit. Beispielsweise können wir angeben, was getan werden soll, wenn doppelte Schlüssel vorhanden sind, indem wir eine Zusammenführungsfunktion übergeben, um Konflikte zu lösen. 🎜🎜Das Folgende ist ein Beispielcode mit Schlüsselkonfliktbehandlung: 🎜rrreee🎜Im obigen Code haben wir eine Zusammenführungsfunktion an der dritten Parameterposition der Methode <code>toMap() (Länge 1) übergeben , Länge2) -> Länge1. Diese Funktion entscheidet sich dafür, den ersten Schlüssel beizubehalten, wenn auf doppelte Schlüssel gestoßen wird, und ignoriert nachfolgende Schlüssel. 🎜🎜Das Ausgabeergebnis lautet wie folgt: 🎜rrreee🎜Sie können sehen, dass bei einem Schlüsselkonflikt nur der erste angezeigte Schlüssel beibehalten wird und andere Schlüssel ignoriert werden. 🎜🎜Durch die Verwendung der collect()-Methode der Stream-API können wir die Sammlung sehr bequem als Map-Objekt sammeln und außerdem die Zuordnungsfunktionen von Schlüssel und Wert sowie die Art und Weise der Handhabung anpassen Konflikte. Auf diese Weise können wir die Erfassungsdaten flexibler verarbeiten und die Lesbarkeit und Effizienz des Codes verbessern. 🎜🎜Das Obige ist die Einführung und der Beispielcode zur Verwendung der Methode collect() zum Sammeln von Sammlungen in Map-Objekten in Java 8. Ich hoffe, dieser Artikel kann Ihnen helfen, die Verwendung der Stream-API zu verstehen. 🎜

Das obige ist der detaillierte Inhalt vonStream-API in Java 8: So sammeln Sie eine Sammlung als Kartenobjekt mit der Methode „collect()“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn