📌  相关文章
📜  如何在Java中将 Stream 转换为 Map(1)

📅  最后修改于: 2023-12-03 15:24:32.396000             🧑  作者: Mango

如何在Java中将 Stream 转换为 Map

在Java中,我们经常使用Stream API来处理数据集。而有时候我们需要将Stream转换为Map,以便更方便地操作数据。在本文中,我们将介绍如何使用Stream API将Stream转换为Map。

什么是Stream?

Java 8中引入的Stream API是用于一组Java对象的高级、流式处理的API。Stream主要用于集合、数组和I/O操作。Stream是由一系列操作组成的,这些操作可以是中间操作或终止操作,上下游之间调用中间操作来操作数据,最后由终止操作返回结果流。

如何将Stream转换为Map?

在Java 8中,我们可以使用Collectors.toMap()方法将Stream转换为Map。该方法需要传递两个参数:一个是将key从对象中提取出来的函数,一个是将value从对象中提取出来的函数。

下面是一个简单的示例,说明如何将字符串数组转换为Map:

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamToMapDemo {
    public static void main(String[] args) {
        String[] fruits = {"apple", "banana", "orange", "pear", "peach"};
        Map<String, Integer> lengthMap = Arrays.stream(fruits)
                .collect(Collectors.toMap(
                        String::toString,
                        String::length
                ));
        System.out.println(lengthMap);
    }
}

上面的代码将字符串数组转换为了一个Map,其中字符串是作为key,字符串长度作为value。

除了使用toMap方法之外,我们还可以使用groupingBy方法将Stream转换为Map,该方法根据指定的key对元素进行分组。下面是一个示例:

public class StreamToMapDemo {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("john", "math"),
                new Student("mary", "history"),
                new Student("peter", "math"),
                new Student("tom", "history")
        );

        Map<String, List<Student>> groupMap = students.stream()
                .collect(Collectors.groupingBy(Student::getSubject));
        System.out.println(groupMap);
    }
}

class Student {
    private String name;
    private String subject;

    public Student(String name, String subject) {
        this.name = name;
        this.subject = subject;
    }

    public String getName() {
        return name;
    }

    public String getSubject() {
        return subject;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", subject='" + subject + '\'' +
                '}';
    }
}

上面的代码将List<Student>转换为了一个以subject为key,以Student为value的Map。这个示例使用了groupingBy方法。

总结

本文介绍了如何使用Stream API将Stream转换为Map。我们首先简单介绍了什么是Stream,然后讲解了如何使用Collectors.toMap()方法和groupingBy方法实现Stream转换为Map的功能。这些示例可以帮助您更好地理解Stream的使用方式。