介绍
经常的,我们需要抽取一个对象列表中的某个属性作为新列表,此时我们就可以使用Java8新特性Lambda表达式来快速处理,通过情况下如果不适用Lambda表达式,我们一般会通过for循环将对象列表中每个实体的属性值提取到新的列表中,其实Lambda也是这样处理的,只是他帮我们封装了很多内容,让我们写起来很方便,下面就来看看Lambda是如何实现这个功能的吧
代码
实体
package com.example.java.entity;
import lombok.Builder;
import lombok.Data;
/**
* @description: user
* @author: zj
* @date: 2022-08-12 20:25
*/
@Data
@Builder
public class User {
private String id;
private String name;
private String password;
private String addr;
}
工具类
package com.example.java.util;
import com.example.java.entity.User;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @description: user generator
* @author: zj
* @date: 2022-08-12 20:27
*/
public class UserGenerator {
public static List<User> getUsers() {
List<User> users = new ArrayList<>();
for (int i = 0; i < 100; i++) {
users.add(User.builder()
.id("id - " + getSimpleUUID())
.addr("addr - " + getSimpleUUID())
.name("name - " + getSimpleUUID())
.password("password - " + getSimpleUUID()).build());
}
return users;
}
private static String getSimpleUUID() {
return UUID.randomUUID().toString().replaceAll("-","");
}
}
测试函数
package com.example.java.test;
import com.example.java.entity.User;
import com.example.java.util.UserGenerator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description: Lambda Test
* @author: zj
* @date: 2022-08-12 20:24
*/
public class LambdaTest {
public static void main(String[] args) {
//创建Users
List<User> users = UserGenerator.getUsers();
//将users的addr属性提取出来作为一个新的列表
List<String> collect = users.stream().map(User::getAddr).collect(Collectors.toList());
//输出对比
System.out.println("users ==== \n " + users);
System.out.println("collect ==== \n " + collect);
}
}
结果
将User中的addr单独提取出来组成了一个新的list