我如何比较两个列表并使用新对象创建新列表

问题描述 投票:0回答:2

我有 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。

如何以干净的方式使用流来做到这一点?

java stream
2个回答
0
投票

伙计,我相信你可以做这样的事情,如果我知道你想要做什么以及你的代码如何工作:

List<CustomerDto> customerDtoList = new ArrayList<>();

for(Customer customer : allCustomers) {
    CustomerDto customerDto = new CustomerDto(customer, customer.isInUse());
    customerDtoList.add(customerDto);
}

在这里,您只需使用 allCustomers 列表中的客户及其变量“inUse”的值实例化一个新的 CustomerDto 对象。然后,该对象将被添加到 List 对象中。

我不知道我写的是否正确,也许你也可以做一些重构,但正如上面另一个人所说,如果我们知道你已经尝试过什么,那就更容易了。我希望我的回答至少能让您知道该怎么做:v.


0
投票

假设

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();
© www.soinside.com 2019 - 2024. All rights reserved.