我在下面给出了这个方法......我如何在流 api 中更改这个方法。
public List<AddNewSchoolBean> getEmployeeList() {
List<AddNewSchoolBean> list = new ArrayList<>();
try {
List<Object[]> empList = null;
empList = Dao.getEmpDetailsFromUserMst();
if (empList.size() != 0) {
for (Object[] obj : empList) {
AddNewSchoolBean bean = AddNewSchoolBean.builder()
.employeeId((obj[0]).toString())
.employeeName((obj[1]).toString())
.schoolName((obj[2]).toString())
.build();
list.add(bean);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
你甚至可以简化到这个
@SneakyThrows
public List<AddNewSchoolBean> getEmployeeList() {
return emptyIfNull(Dao.getEmpDetailsFromUserMst())
.stream()
.map(AddNewSchoolBean::new)
.toList();
}
你的 AddNewSchoolBean 有对象构造函数
public class AddNewSchoolBean{
String employeeId;
String employeeName;
String schoolName;
public AddNewSchoolBean(Object[] data) {
this.employeeId = String.valueOf(data[0]);
this.employeeName = String.valueOf(data[1]);
this.schoolName = String.valueOf(data[2]);
}
}
需要一些额外的导入以使其更简单
import lombok.SneakyThrows;
import static org.apache.commons.collections4.ListUtils.emptyIfNull;
在此 Lambda 表达式中,您首先使用
emptyIfNull
(可以为空,但不会抛出 NPE)确保您的集合不为空,然后流式处理集合并将其映射到 AddNewSchoolBean
bean/entity通过构造函数。如果您愿意,您当然可以使用with
,但这看起来更干净。然后最后你收集到List
。请注意这是不可变的结果,如果你需要可变的,使用.collect(Collectors.toList())
假设您想在内部使用
java.util.Stream
我建议您先稍微润色/清理您的代码。
empList
变量的声明和赋值private
方法中。if
检查尺寸不会添加任何东西。public List<AddNewSchoolBean> getEmployeeList() {
List<AddNewSchoolBean> list = new ArrayList<>();
try {
List<Object[]> empList = Dao.getEmpDetailsFromUserMst();
for (Object[] obj : empList) {
AddNewSchoolBean bean = convert(obj);
list.add(bean);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
private AddNewSchoolBean convert(Object[] empArray) {
return AddNewSchoolBean.builder()
.employeeId((empArray[0]).toString())
.employeeName((empArray[1]).toString())
.schoolName((empArray[2]).toString())
.build();
}
现在假设您不能更改
Dao.getEmpDetailsFromUserMst();
,您可以在stream()
上使用List
方法将其转换为java.util.Stream
。然后就可以用map
把数组转成对象最后collect到一个list返回。
public List<AddNewSchoolBean> getEmployeeList() {
List<Object[]> empList = Dao.getEmpDetailsFromUserMst();
return empList.stream()
.map(this::convert)
.toList();
}
这是假设您使用的是 JDK17,并且您当然需要上述
convert
方法。
我认为干净的方式是将它映射到
AddNewSchoolBean
然后收集到List中:
public List<AddNewSchoolBean> getEmployeeList() {
try {
List<Object[]> empList = Dao.getEmpDetailsFromUserMst();
return empList.stream()
.map(this::createAddNewSchoolBean)
.collect(Collectors.toList());
} catch (Exception e) {
e.printStackTrace();
}
return Collections.emptyList();
}
private AddNewSchoolBean createAddNewSchoolBean(Object[] obj) {
return AddNewSchoolBean.builder()
.employeeId(String.valueOf(obj[0]))
.employeeName(String.valueOf(obj[1]))
.schoolName(String.valueOf(obj[2]))
.build();
}
list = empList.stream()
.map(emp -> AddNewSchoolBean.builder()
.employeeId((emp[0]).toString())
.employeeName((emp[1]).toString())
.schoolName((emp[2]).toString())
.build()
);