package org.leumasjaffe.recipe.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Stream; import org.leumasjaffe.observer.Observable; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper=false) public class Card extends Observable.Instance implements CompoundRecipeComponent { int id = 0; // TODO Fix this int[] dependsOn = {}; // decltype(id)[] String vessel = ""; Optional preparation = Optional.empty(); List cooking = new ArrayList<>(); Optional rest = Optional.empty(); public Stream getIngredientsAsStream() { return getComponents().flatMap(RecipeComponent::getIngredientsAsStream); } public Stream getComponents() { if (preparation.isPresent()) { return Stream.of(preparation.get()); } else { return cooking.stream(); } } }