Após procurar parece que o stream da lista de preços não está funcionando Minha classe Produto:
//imports
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String titulo;
private String descricao;
private int paginas;
@ElementCollection
private List<Preco> precos;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Calendar dataLancamento;
private String sumarioPath;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getPaginas() {
return paginas;
}
public void setPaginas(int paginas) {
this.paginas = paginas;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Preco> getPrecos() {
return precos;
}
public void setPrecos(List<Preco> precos) {
this.precos = precos;
}
public Calendar getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(Calendar dataLancamento) {
this.dataLancamento = dataLancamento;
}
public String getSumarioPath() {
return sumarioPath;
}
public void setSumarioPath(String sumarioPath) {
this.sumarioPath = sumarioPath;
}
public BigDecimal precoPara(TipoPreco tipo) {
return precos.stream().filter(preco -> preco.getTipo().equals(tipo)).findFirst().get().getValor();
}
@Override
public String toString() {
return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (id != other.id)
return false;
return true;
}
}