Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。返回列表、字符串、或产生统计结果的收集器
实例如下:
static class Student {
private String address;
private String name;
private Integer age;
public Student(String address, String name, Integer age) {
super();
this.address = address;
this.name = name;
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [address=" + address + ", name=" + name + ", age=" + age + "]";
}
}
public static List<Student> list = new ArrayList<>();
static {
list.add(new Student("北京", "依依", 17));
list.add(new Student("上海", "尔尔", 18));
list.add(new Student("广州", "散散", 19));
list.add(new Student("深圳", "思思", 20));
list.add(new Student("杭州", "呜呜", 21));
list.add(new Student("杭州", "柳柳", 22));
}
public static void main(String[] args) {
collectTest();
}
public static void collectTest() {
// 转list
List<String> nameList = list.stream().map(student -> student.getName()).collect(Collectors.toList());
System.out.println(nameList);
// 转set
Set<String> addressSet = list.stream().map(student -> student.getAddress()).collect(Collectors.toSet());
System.out.println(addressSet);
// 转map,需要指定key和value,Function.identity()表示当前的Emp对象本身
Map<String, Student> nameMap = list.stream().collect(Collectors.toMap(Student::getName, Function.identity()));
System.out.println(nameMap);
// 计算元素中的个数
Long count = list.stream().collect(Collectors.counting());
System.out.println(count);
// 计算元素中数据求和 summingInt summingLong,summingDouble
Integer sumAges = list.stream().collect(Collectors.summingInt(Student::getAge));
System.out.println(sumAges);
// 计算元素中数据平均值 averagingInt,averagingLong,averagingDouble
Double aveAges = list.stream().collect(Collectors.averagingInt(Student::getAge));
System.out.println(aveAges);
// 综合处理: 求最大值,最小值,平均值,求和操作 summarizingInt,summarizingLong,summarizingDouble
IntSummaryStatistics intSummary = list.stream().collect(Collectors.summarizingInt(Student::getAge));
// 平均值
System.out.println(intSummary.getAverage());
// 最大值
System.out.println(intSummary.getMax());
// 最小值
System.out.println(intSummary.getMin());
// 求和
System.out.println(intSummary.getSum());
// 连接字符串
String strName = list.stream().map(emp -> emp.getName()).collect(Collectors.joining());
System.out.println(strName);
// 连接字符串,中间分隔符
String strName1 = list.stream().map(emp -> emp.getName()).collect(Collectors.joining("-中间分隔符-"));
System.out.println(strName1);
// 连接字符串,前缀,后缀和中间分隔符
String strName2 = list.stream().map(emp -> emp.getName()).collect(Collectors.joining("-中间分隔符-", "前缀", "后缀"));
System.out.println(strName2);
// maxBy 按照比较器中的比较结果刷选 最大值
Optional<Integer> maxAge = list.stream().map(emp -> emp.getAge()).collect(Collectors.maxBy(Integer::max));
System.out.println(maxAge);
// minBy 按照比较器中的比较结果刷选 最小值
Optional<Integer> minAge = list.stream().map(emp -> emp.getAge()).collect(Collectors.minBy(Integer::min));
System.out.println(minAge);
// 归约操作
Optional<Integer> sumAge = list.stream().map(emp -> emp.getAge()).collect(Collectors.reducing((x, y) -> x + y));
System.out.println(sumAge);
// 分操作 groupingBy 根据地址,把原list进行分组
Map<String, List<Student>> mapGroup = list.stream().collect(Collectors.groupingBy(Student::getAddress));
System.out.println(mapGroup);
// partitioningBy 分区操作 需要根据类型指定判断分区
Map<Boolean, List<Integer>> partitioningMap = list.stream().map(emp -> emp.getAge()).collect(Collectors.partitioningBy(emp -> emp > 20));
System.out.println(partitioningMap);
}
文章仅作为个人学习整理
本文详细介绍Java Stream API中的Collectors类,展示如何使用收集器将Stream转换为集合、字符串及统计数据,包括列表转换、集合创建、映射构建、计数、求和、平均值计算、最大最小值获取、字符串连接等实用功能。
1458

被折叠的 条评论
为什么被折叠?



