[英]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.