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::getId
和Student::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.toMap
和Collectors.toList
等方法,我们可以将Stream的结果保存为Map或者List,非常灵活和方便。
希望本文能够帮助你更好地理解Java Stream的使用方法,如果有任何疑问或者建议,欢迎留言讨论!