安装 Hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
TestUser实体类
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TestUser implements Serializable {
private static final long serialVersionUID = 1L;
String name;
Integer age;
String profession;
String address;
String like;
public static TestUser createUser(){
return TestUser.builder()
.name(buildString("name"))
.age(RandomUtil.randomInt(0, 150))
.profession(buildString("profession"))
.address(buildString("address"))
.like(buildString(""))
.build();
}
private static String buildString(String str) {
switch (str){
case "name":
switch (RandomUtil.randomInt(1,4)){
case 1:
return "张三"+RandomUtil.randomInt(1,101)+"号";
case 2:
return "李四"+RandomUtil.randomInt(1,101)+"号";
default:
return "王五"+RandomUtil.randomInt(1,101)+"号";
}
case "address":
switch (RandomUtil.randomInt(1,5)){
case 1:
return "北京";
case 2:
return "上海";
case 3:
return "天津";
default:
return "其他";
}
case "profession":
switch (RandomUtil.randomInt(1,4)){
case 1:
return "学生";
case 2:
return "工程师";
default:
return "老师";
}
default:
switch (RandomUtil.randomInt(1,4)){
case 1:
return "唱";
case 2:
return "跳";
case 3:
return "篮球";
default:
return "rap";
}
}
}
}
代码从这开始
基本使用
@Test
void test1(){
List<TestUser> userList = new ArrayList<>();
// 创建数据
for (int i = 0; i <10; i++) {
userList.add(TestUser.createUser());
}
System.out.println("===================初始数据======================");
System.out.println("名称\t\t\t\t年龄\t\t\t职业\t\t\t地址\t\t\t爱好");
userList.forEach(u-> System.out.println(u.getName()+"\t\t\t"+u.getAge()+"\t\t\t"+u.getProfession()+"\t\t\t"+u.getAddress()+"\t\t\t"+u.getLike()));
System.out.println();
//过滤
System.out.println("===================过滤:过滤掉非李姓之人======================");
List<TestUser> filterList = userList.stream().filter(user -> "李".equals(user.getName().substring(0,1))).collect(Collectors.toList());
filterList.forEach(e-> System.out.print(e.getName()+" "));
System.out.println();
System.out.println();
//取单个映射
System.out.println("===================取pojo某个属性值,返回列表======================");
List<String> nameMap = userList.stream().map(TestUser::getName).collect(Collectors.toList());
nameMap.forEach(u-> System.out.print(u+" "));
System.out.println();
//去重
System.out.println();
System.out.println("===================去重======================");
userList.stream().map(TestUser::getAddress).collect(Collectors.toList()).stream().distinct().collect(Collectors.toList()).forEach(e-> System.out.print(e+" "));
System.out.println();
}
运行结果:
排序
//排序
System.out.println("===================年龄排序======================");
userList.stream().sorted(Comparator.comparing(TestUser::getAge)).collect(Collectors.toList()).forEach(e-> System.out.println(e.getName()+" "+e.getAge()));
结果
分组
//分组
System.out.println("===================分组:按照地址分组======================");
Map<String, List<TestUser>> groupMapOne = userList.stream().collect(Collectors.groupingBy(TestUser::getAddress));
结果:
{
"上海": [
{
"name": "张三69号",
"age": 52,
"profession": "老师",
"address": "上海",
"like": "篮球"
},
{
"name": "张三46号",
"age": 88,
"profession": "老师",
"address": "上海",
"like": "唱"
},
{
"name": "张三82号",
"age": 46,
"profession": "老师",
"address": "上海",
"like": "篮球"
}
],
"天津": [
{
"name": "王五70号",
"age": 86,
"profession": "学生",
"address": "天津",
"like": "唱"
},
{
"name": "王五45号",
"age": 20,
"profession": "老师",
"address": "天津",
"like": "唱"
}
],
"其他": [
{
"name": "张三52号",
"age": 6,
"profession": "校长",
"address": "其他",
"like": "篮球"
},
{
"name": "李四84号",
"age": 125,
"profession": "学生",
"address": "其他",
"like": "跳"
}
],
"北京": [
{
"name": "张三53号",
"age": 33,
"profession": "老师",
"address": "北京",
"like": "跳"
},
{
"name": "王五51号",
"age": 34,
"profession": "校长",
"address": "北京",
"like": "跳"
},
{
"name": "张三43号",
"age": 97,
"profession": "学生",
"address": "北京",
"like": "唱"
}
]
}
多重分组
//多重分组
System.out.println("===================分组:更具地址,职业分组======================");
Map<String,Map<String,List<TestUser>>> groupMapTwo = userList.stream().collect(Collectors.groupingBy(e->{
return e.getAddress();
},Collectors.groupingBy(TestUser::getProfession)));
结果:
{
"上海": {
"老师": [
{
"name": "张三69号",
"age": 52,
"profession": "老师",
"address": "上海",
"like": "篮球"
},
{
"name": "张三46号",
"age": 88,
"profession": "老师",
"address": "上海",
"like": "唱"
},
{
"name": "张三82号",
"age": 46,
"profession": "老师",
"address": "上海",
"like": "篮球"
}
]
},
"天津": {
"学生": [
{
"name": "王五70号",
"age": 86,
"profession": "学生",
"address": "天津",
"like": "唱"
}
],
"老师": [
{
"name": "王五45号",
"age": 20,
"profession": "老师",
"address": "天津",
"like": "唱"
}
]
},
"其他": {
"学生": [
{
"name": "李四84号",
"age": 125,
"profession": "学生",
"address": "其他",
"like": "跳"
}
],
"校长": [
{
"name": "张三52号",
"age": 6,
"profession": "校长",
"address": "其他",
"like": "篮球"
}
]
},
"北京": {
"学生": [
{
"name": "张三43号",
"age": 97,
"profession": "学生",
"address": "北京",
"like": "唱"
}
],
"校长": [
{
"name": "王五51号",
"age": 34,
"profession": "校长",
"address": "北京",
"like": "跳"
}
],
"老师": [
{
"name": "张三53号",
"age": 33,
"profession": "老师",
"address": "北京",
"like": "跳"
}
]
}
}