lambda 使用

102 阅读2分钟

安装 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();

}

运行结果:

image.png

排序

//排序
System.out.println("===================年龄排序======================");
userList.stream().sorted(Comparator.comparing(TestUser::getAge)).collect(Collectors.toList()).forEach(e-> System.out.println(e.getName()+" "+e.getAge()));

结果

image.png

分组

//分组
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": "跳"
            }
        ]
    }
}