2
respostas

Método precoPara() da classe Produto está retornando null

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;
    }
}
2 respostas

Olá Guilherme, bom dia.

consegue ser mais especifico com "Após procurar parece que o stream da lista de preços não está funcionando Minha classe Produto:" ?

Qual erro é apresentado? Qual a versão do Java que está utilizando, esse código está compilando na sua IDE?

Depois de mexer um pouco notei que ele não estava funcionando com produtos no banco de dados que tinham precos com valores nulos, então eu deletei esses produtos das tables e criei novos produtos e esse erro nunca mais apareceu.