我有 2 个清单:
1 列表包含数据库中的所有客户,第二个列表仅包含数据库中的部分客户:
List<Customers> allCustomers = findAll();
List<Customers> inUseCustomers = findAllCustomersInUse();
我有另一个对象调用:CustomerDto
public class CustomerDto {
private Customer _customer;
private boolean _inUse;
public CustomerDto(Customer customer, boolean inUse) {
this._customer = customer;
this._inUse = inUse;
}
}
我想创建一个新的 CustomerDto 列表,其中包含所有客户,但对于那些正在使用的客户,他们的字段“inUse”将为 true,其余字段将为 false。
如何以干净的方式使用流来做到这一点?
伙计,我相信你可以做这样的事情,如果我知道你想要做什么以及你的代码如何工作:
List<CustomerDto> customerDtoList = new ArrayList<>();
for(Customer customer : allCustomers) {
CustomerDto customerDto = new CustomerDto(customer, customer.isInUse());
customerDtoList.add(customerDto);
}
在这里,您只需使用 allCustomers 列表中的客户及其变量“inUse”的值实例化一个新的 CustomerDto 对象。然后,该对象将被添加到 List 对象中。
我不知道我写的是否正确,也许你也可以做一些重构,但正如上面另一个人所说,如果我们知道你已经尝试过什么,那就更容易了。我希望我的回答至少能让您知道该怎么做:v.
假设
Customer
具有 id
属性,该属性是实体的唯一标识符(即,当且仅当两个客户具有相同的 id
值时才是相同的),那么以下内容可以实现您的既定目标:
Set<Integer> inUseIds = inUseCustomers.stream()
.map(Customer::getId).collect(Collectors.toSet());
List<CustomerDto> dtos = allCustomers.stream()
.map(c -> new CustomerDto(c, inUseIds.contains(c.getId())))
.toList();