簡體   English   中英

Java stream 映射為 boolean 值?

[英]Java stream mapping for a boolean value?

我有以下 DTO:

@Data
public class MenuItemDTO {
    private UUID siteUuid;
    private UUID productUuid;
    private boolean outOfStock;

    public MenuItemDTO(MenuItem menuItem, boolean outOfStock) {
        this.siteUuid = menuItem.getSiteUuid();
        this.productUuid = menuItem.getProductUuid();
        this.outOfStock = outOfStock;
    }
}

我在MenuItem實體中沒有outOfStock字段,如果記錄不為空,我想填寫outOfStock字段(我只是保留缺貨產品)。 但我不確定是否有使用 stream 的正確方法:

public List<MenuItemDTO> findAllBySiteBrandUuid(UUID siteUuid) {
    return menuItemRepository.findAllBySiteUuid(siteUuid)
            .stream()
            .map(m -> new MenuItemDTO(m, m.getUuid() != null))
            .collect(Collectors.toList());
}

1.由於我沒有在MenuItem實體中保留outOfStock字段,我在MenuItemDTO中的方法是否正確?

2.我想知道是否有一種更優雅的方法,可以將 stream 正確地用於.map(m -> new MenuItemDTO(m, m.getUuid() != null))部分。

有相當多的重復。 您將 object 和 object 的字段傳遞給構造函數。 也許更優雅的方法是通過將邏輯移至構造函數來避免兩次傳遞信息:

public MenuItemDTO(MenuItem menuItem) {
    this.siteUuid = menuItem.getSiteUuid();
    this.productUuid = menuItem.getProductUuid();
    this.outOfStock = menuItem.getUuid() != null;
}

然后 stream 映射縮減為:

public List<MenuItemDTO> findAllBySiteBrandUuid(UUID siteUuid) {
    return menuItemRepository.findAllBySiteUuid(siteUuid)
            .stream()
            .map(MenuItemDTO::new)
            .collect(Collectors.toList());
}

DTO 中的信息是客戶需要的任何信息,因此我們不能決定將 boolean 放在那里是否正確。 我會說,如果那是將在客戶端使用的東西,那就太好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM