Java Stream返回Map List

在Java编程中,我们经常需要对集合进行各种操作,比如过滤、映射、排序等。Java 8引入了Stream API,使得对集合的操作更加灵活和高效。在实际开发中,有时候我们需要将Stream的结果保存为Map或者List,下面我们就来讲解如何使用Stream返回Map和List。

返回Map

将List转换为Map

假设我们有一个包含学生信息的List,每个学生有学号和姓名两个属性。现在我们想要将这个List转换为一个Map,其中学号作为key,姓名作为value。我们可以使用Stream的Collectors.toMap方法实现:

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

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student(1, "Alice"));
        students.add(new Student(2, "Bob"));
        students.add(new Student(3, "Cathy"));
        
        Map<Integer, String> studentMap = students.stream()
            .collect(Collectors.toMap(Student::getId, Student::getName));
        
        System.out.println(studentMap);
    }
}

class Student {
    private Integer id;
    private String name;
    
    // Constructor, getters, setters
}

上面的代码中,我们首先创建了包含学生信息的List,然后使用Stream的collect方法,结合Collectors.toMap方法,将List转换为Map。其中Student::getIdStudent::getName是方法引用,用于指定Map的key和value。

使用自定义逻辑创建Map

有时候我们需要根据自定义逻辑来创建Map。比如我们希望将学生信息按照姓名的首字母进行分组,可以通过传入自定义的merge函数来实现:

Map<Character, List<Student>> studentGroup = students.stream()
    .collect(Collectors.groupingBy(s -> s.getName().charAt(0)));

上面的代码中,我们使用Collectors.groupingBy方法按照学生姓名首字母进行分组,最终返回一个Map,key为学生姓名首字母,value为对应的学生列表。

返回List

有时候我们需要将Stream的结果保存为List,这在一些场景下非常有用。

过滤并返回List

假设我们有一个包含数字的List,现在我们想要将其中的偶数筛选出来,然后保存为一个新的List。我们可以使用Stream的filter方法实现:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer> evenNumbers = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());

System.out.println(evenNumbers);

上面的代码中,我们首先创建了包含数字的List,然后使用Stream的filter方法筛选出偶数,最后使用Collectors.toList将结果保存为一个新的List。

映射并返回List

有时候我们需要对Stream中的元素进行映射操作,然后保存为一个新的List。比如我们有一个包含学生信息的List,现在我们想要将学生姓名提取出来保存为一个新的List。可以使用Stream的map方法实现:

List<String> studentNames = students.stream()
    .map(Student::getName)
    .collect(Collectors.toList());

上面的代码中,我们使用map方法提取学生姓名,最终将结果保存为一个新的List。

总的来说,Java Stream提供了强大的API,可以方便地对集合进行各种操作。通过Collectors.toMapCollectors.toList等方法,我们可以将Stream的结果保存为Map或者List,非常灵活和方便。

希望本文能够帮助你更好地理解Java Stream的使用方法,如果有任何疑问或者建议,欢迎留言讨论!