7-Stream收集器
收集器简介
将流中的元素累积成一个结果
作用于终端操作collect()上
collect/Collector/Collectors
收集器演示
将流元素归约和汇总成一个值
将流元素分组
将流元素分区
import com.alibaba.fastjson.JSON; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @description: 常见预定义收集器使用 */ public class StreamCollector { private static class Student{ private String name; private Integer age; public String grade; Student(String name, Integer age, String grade){ this.name = name; this.age = age; this.grade = grade; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } 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; } } List<Student> list; @Before public void init(){ /** * 该写法有内存泄漏风险,不要在生产使用 */ list = new ArrayList<Student>(){ { add(new Student("小明", 22, "二年级")); add(new Student("小黄", 20, "一年级")); add(new Student("小红", 21, "二年级")); add(new Student("小超", 25, "三年级")); add(new Student("小王", 20, "一年级")); } }; } /** * 结果集输出为list */ @Test public void toList(){ List<Student> result = list.stream() .filter(student -> student.getAge() > 20) .collect(Collectors.toList()); System.out.println(JSON.toJSONString(result, true)); //[ // { // "age":22, // "grade":"二年级", // "name":"小明" // }, // { // "age":21, // "grade":"二年级", // "name":"小红" // }, // { // "age":25, // "grade":"三年级", // "name":"小超" // } //] } /** * 分组 */ @Test public void group(){ Map<String, List<Student>> result = list.stream() .collect(Collectors.groupingBy(student -> student.getGrade())); System.out.println(JSON.toJSONString(result, true)); //{ // "一年级":[ // { // "age":20, // "grade":"一年级", // "name":"小黄" // }, // { // "age":20, // "grade":"一年级", // "name":"小王" // } // ], // "三年级":[ // { // "age":25, // "grade":"三年级", // "name":"小超" // } // ], // "二年级":[ // { // "age":22, // "grade":"二年级", // "name":"小明" // }, // { // "age":21, // "grade":"二年级", // "name":"小红" // } // ] //} } /** * 分区 */ @Test public void partition(){ Map<Boolean, List<Student>> result = list.stream() .collect(Collectors.partitioningBy(student -> student.getAge() > 20)); System.out.println(JSON.toJSONString(result, true)); //{false:[ // { // "age":20, // "grade":"一年级", // "name":"小黄" // }, // { // "age":20, // "grade":"一年级", // "name":"小王" // } // ],true:[ // { // "age":22, // "grade":"二年级", // "name":"小明" // }, // { // "age":21, // "grade":"二年级", // "name":"小红" // }, // { // "age":25, // "grade":"三年级", // "name":"小超" // } // ] //} } }

浙公网安备 33010602011771号