java是从列表中以函数方式创建列表的最干净的方法吗?
我有以下代码:
List<DataObject> dataObjectList = new ArrayList<>();
for (Company company : companyRepository.findAll()) {
for (Employee employee : company.employees) {
DataOjbect dataObject = new dataObject();
dataObject.setCompanyName(company.getName());
dataObject.setEmployeeName(employee.getName());
dataObjectList.add(dataObject);
}
}
用java编写函数式代码最干净的方法是什么
请注意companyRepository.findAll()
返回一个迭代器,因此不能简单地从中创建流
# 1 楼答案
在我看来,使用流来实现这一点并没有真正的好处。我会坚持你所拥有的。您可以通过在
DataObject
类中创建一个constructor
使其更加简洁。然后您可以执行以下操作:# 2 楼答案
要从
Iterator
创建Stream
,需要首先创建Iterable
,然后使用Iterable::spliterator
方法将其Spliterator
传递到StreamSupport::stream
只要
Iterable
只有一个抽象方法,就可以通过lambda表达式从Iterator
创建Iterable
,因此该接口适用于此类表达式现在,事情变得简单了:利用
flatMap
的优势,将嵌套的列表结构(每个公司都有一个员工列表的公司列表)展平。您需要在flatMap
方法内部创建每个DataObject
,只要其实例化依赖于company.getName()
参数:。。。如果您使用构造函数,那么就不会那么冗长了