Rumah  >  Artikel  >  Java  >  API Strim dalam Java 8: Cara mengumpul koleksi sebagai objek Peta menggunakan kaedah collect().

API Strim dalam Java 8: Cara mengumpul koleksi sebagai objek Peta menggunakan kaedah collect().

WBOY
WBOYasal
2023-07-31 15:24:191852semak imbas

API Stream baharu telah diperkenalkan di Java 8, yang menyediakan cara yang lebih cekap dan ringkas untuk memproses data pengumpulan. API Strim menyediakan pelbagai kaedah untuk memproses dan mengubah data, antaranya kaedah collect() ialah salah satu kaedah yang paling penting dan biasa digunakan. Artikel ini menerangkan cara menggunakan kaedah collect() untuk mengumpul koleksi ke dalam objek Peta dan menyediakan contoh kod yang sepadan. 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()

Sebelum Java 8, jika kami ingin menukar koleksi menjadi objek Peta, kami perlu menggunakan operasi traversal dan penambahan yang membosankan. Dalam Java 8, matlamat ini boleh dicapai dengan lebih mudah menggunakan kaedah collect() API Strim. 🎜🎜Kaedah collect() ialah salah satu operasi penamatan API Stream Ia menerima parameter Collector untuk menentukan kaedah pengumpulan. Apabila mengumpul sebagai objek Peta, kami boleh menggunakan kaedah Collectors.toMap() untuk mengumpul. 🎜🎜Berikut ialah contoh kod yang menggunakan kaedah collect() untuk mengumpul koleksi ke dalam objek Peta: 🎜rrreee🎜Dalam kod di atas, kami mula-mula mencipta koleksi buah-buahan yang mengandungi tiga kod buah-buahan>, dan kemudian tukarkannya kepada aliran melalui kaedah stream(). Kemudian gunakan kaedah collect() dan hantar dalam kaedah Collectors.toMap() sebagai parameter Kaedah ini menerima dua parameter ekspresi lambda untuk menentukan pemetaan Kunci dan Nilai fungsi. 🎜🎜Dalam contoh kami, fungsi pemetaan Kunci ialah buah -> ) , iaitu panjang buah diambil sebagai Nilai. Akhir sekali, kaedah collect() memproses elemen dalam strim mengikut fungsi pemetaan yang ditentukan dan mengembalikan objek Peta. 🎜🎜Hasil output adalah seperti berikut: 🎜rrreee🎜Seperti yang anda lihat, akhirnya kami memperoleh objek Peta yang mengandungi buah dan panjangnya. 🎜🎜Selain fungsi pengumpulan asas, kaedah Collectors.toMap() juga menyediakan beberapa parameter lain. Sebagai contoh, kita boleh menentukan perkara yang perlu dilakukan apabila terdapat Kunci pendua, dengan menghantar fungsi gabungan untuk menyelesaikan konflik. 🎜🎜Berikut ialah contoh kod dengan pengendalian konflik Kunci: 🎜rrreee🎜Dalam kod di atas, kami lulus dalam fungsi gabungan dalam kedudukan parameter ketiga kaedah <code>toMap() (length1 , length2) -> length1. Fungsi ini akan memilih untuk menyimpan Kekunci pertama apabila menemui Kekunci pendua, dan mengabaikan Kekunci seterusnya. 🎜🎜Hasil output adalah seperti berikut: 🎜rrreee🎜Anda dapat melihat bahawa apabila konflik Kunci berlaku, hanya Kunci pertama yang muncul dikekalkan dan Kunci lain diabaikan. 🎜🎜Dengan menggunakan kaedah collect() API Strim, kami boleh mengumpul koleksi dengan mudah sebagai objek Peta, dan kami juga boleh menyesuaikan fungsi pemetaan Kunci dan Nilai serta cara mengendalikan konflik. Dengan cara ini, kami boleh memproses data pengumpulan dengan lebih fleksibel dan meningkatkan kebolehbacaan dan kecekapan kod. 🎜🎜Di atas ialah pengenalan dan contoh kod tentang menggunakan kaedah collect() untuk mengumpul koleksi ke dalam objek Peta dalam Java 8. Saya harap artikel ini dapat membantu anda memahami penggunaan Stream API. 🎜

Atas ialah kandungan terperinci API Strim dalam Java 8: Cara mengumpul koleksi sebagai objek Peta menggunakan kaedah collect().. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn