gpt4 book ai didi

java - 包含不同对象的 2 个列表的公共(public)部分

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:29 24 4
gpt4 key购买 nike

我有两个列表,一个包含 ProductDto,另一个包含 ConsumedProductDto

@Builder
@Getter
@ToString
public class ProductDto {
private final String id;
private final String productName;
private final Double calories;
private final Double protein;
private final Double fat;
private final Double carbohydrates;
private final Double weight;
}

@Getter
@Builder
@ToString
public class ConsumedProductDto {
private final String username;
private final LocalDate date;
private final String productID;
private final Double weight;
}

现在,我想获得这两个列表的公共(public)部分,如果ProductDto.id == ConsumedProductDto.productID

,则这些对象相等

我编写了这个函数来做到这一点:

private List<ProductDto> matchingProducts(List<ProductDto> products, List<ConsumedProductDto> consumedProducts) {
return products.stream().filter(product ->
consumedProducts.stream()
.allMatch(consumedProduct ->
product.getId().equals(consumedProduct.getProductID())))
.collect(Collectors.toList());
}

它可以工作,直到我有两个(或更多)具有相同productIDConsumedProductDto。然后,当我想要两个(或更多)时,我只能返回一个 ProductDto

有什么想法出了什么问题吗?另外,我知道我可以使用 @Override equals() 并使用 contains() 检查那些公共(public)部分,但是混合使用 2 个不同的类是个好主意吗?

最佳答案

据我从评论的回复中了解到,您实际上是根据过滤条件在输出中查找多个 ConsumedProductDto 的多个 ProductDto 条目以匹配此类产品。

因此,您感兴趣的是迭代 consumedProductDto 并查找要在最终输出中收集的 productDtomap 的任何匹配项。这可能类似于以下方法:

private List<ProductDto> matchingProducts(List<ProductDto> products, List<ConsumedProductDto> consumedProducts) {
return consumedProducts.stream()
.map(consumedProductDto -> products.stream()
.filter(productDto -> productDto.getId().equals(consumedProductDto.getProductID()))
.findAny().orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
}

关于java - 包含不同对象的 2 个列表的公共(public)部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com