Hutool的Java8的Stream进行了封装
package com.fayi.hutool;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.*;
public class CollStreamUtilTest {
private static final ArrayList<Student> students;
static {
students = CollUtil.newArrayList(
new Student(1, "刘备", "三国", "编筐"),
new Student(2, "关羽", "三国", "耍大刀"),
new Student(3, "张飞", "三国", "喝酒"),
new Student(4, "悟空", "西游", "吃桃"),
new Student(5, "八戒", "西游", "喝酒"),
new Student(6, "沙僧", "西游", "编筐")
);
}
public static void main(String[] args) {
// 1.把班级里面所有学生名称转成一个list
convertNameToList();
// 2.把班级里面所有学生老家转成一个set
convertNameToSet();
// 3.建立一个key为学生id, value为学生对象的map
convertToMapByIdAndBean();
// 4.建立一个key为学生id, value为学生姓名的map
convertToMapByIdAndName();
// 5.将学生按照学生老家分组, value为List类型的学生对象集合
convertToMapGroupByHomeTown();
// 6.将学生按照学生老家分组, value为List类型的学生名称集合
convertToMapGroupByHomeTownAndName();
// 7.将学生先按照学生爱好分组, 再按照学生老家分组, value为List对象
convertToMapGroupByLikeThenHomeTown();
// 8.将学生先按照学生爱好分组, 再按照学生老家分组, value为单个学生对象
convertTo2MapGroupByLikeAndHomeTown();
}
private static void convertTo2MapGroupByLikeAndHomeTown() {
// 传统实现方式
Map<String,Map<String, Student>> oldMap = MapUtil.newHashMap();
for (Student student : students) {
String like = student.getLike();
Map<String, Student> likeMap = oldMap.get(like);
if (likeMap == null){
likeMap = MapUtil.newHashMap();
oldMap.put(like,likeMap);
}
likeMap.put(student.getHomeTown(),student);
oldMap.put(student.getLike(),likeMap);
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<String, Map<String, Student>> map = CollStreamUtil.group2Map(students, Student::getLike, Student::getHomeTown);
System.out.println(map);
}
private static void convertToMapGroupByLikeThenHomeTown() {
// 传统实现方式
Map<String, Map<String, List<Student>>> oldMap = MapUtil.newHashMap();
for (Student student : students) {
String like = student.getLike();
Map<String, List<Student>> likeMap = oldMap.get(like);
if (likeMap == null) {
likeMap = MapUtil.newHashMap();
oldMap.put(like,likeMap);
}
oldMap.put(student.getLike(),likeMap);
String homeTown = student.getHomeTown();
List<Student> studentList = likeMap.get(homeTown);
if (studentList == null){
studentList = new ArrayList<>();
likeMap.put(homeTown,studentList);
}
studentList.add(student);
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<String, Map<String, List<Student>>> map = CollStreamUtil.groupBy2Key(students, Student::getLike,Student::getHomeTown);
System.out.println(map);
}
private static void convertToMapGroupByHomeTownAndName() {
// 传统实现方式
Map<String, List<String>> oldMap = MapUtil.newHashMap();
for (Student student : students) {
String homeTown = student.getHomeTown();
List<String> studentList = oldMap.get(homeTown);
if (studentList == null) {
studentList = new ArrayList<>();
oldMap.put(homeTown,studentList);
}
studentList.add(student.getName());
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<String, List<String>> map = CollStreamUtil.groupKeyValue(students, Student::getHomeTown,Student::getName);
System.out.println(map);
}
private static void convertToMapGroupByHomeTown() {
// 传统实现方式
Map<String, List<Student>> oldMap = MapUtil.newHashMap();
for (Student student : students) {
String homeTown = student.getHomeTown();
List<Student> studentList = oldMap.get(homeTown);
if (studentList == null) {
studentList = new ArrayList<>();
oldMap.put(homeTown,studentList);
}
studentList.add(student);
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<String, List<Student>> map = CollStreamUtil.groupByKey(students, Student::getHomeTown);
System.out.println(map);
}
private static void convertToMapByIdAndName() {
// 传统实现方式
Map<Integer, String> oldMap = MapUtil.newHashMap();
for (Student student : students) {
oldMap.put(student.getId(), student.getName());
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<Integer, String> map = CollStreamUtil.toMap(students, Student::getId, Student::getName);
System.out.println(map);
}
private static void convertToMapByIdAndBean() {
// 传统实现方式
Map<Integer, Student> oldMap = MapUtil.newHashMap();
for (Student student : students) {
oldMap.put(student.getId(), student);
}
System.out.println(oldMap);
// 使用封装好的 CollStreamUtil
Map<Integer, Student> map = CollStreamUtil.toIdentityMap(students, Student::getId);
System.out.println(map);
}
private static void convertNameToList() {
// 传统实现方式
List<String> oldNames = CollUtil.newArrayList();
for (Student student : students) {
oldNames.add(student.getName());
}
System.out.println(oldNames);
// 使用封装好的 CollStreamUtil
List<String> collStreamNames = CollStreamUtil.toList(students, Student::getName);
System.out.println(collStreamNames);
}
private static void convertNameToSet() {
// 传统实现方式
Set<String> oldNames = CollUtil.newHashSet();
for (Student student : students) {
oldNames.add(student.getHomeTown());
}
System.out.println(oldNames);
// 使用封装好的 CollStreamUtil
Set<String> collStreamNames = CollStreamUtil.toSet(students, Student::getHomeTown);
System.out.println(collStreamNames);
}
}
@AllArgsConstructor
@NoArgsConstructor
@Data
class Student {
private Integer id;
private String name;
private String homeTown;
private String like;
}