Como imprir isso? Tentei no exemplo abaixo mas não consegui;
List lista = filme.stream() .filter(c -> c.getValor() > 50) .collect(Collectors.toList());
lista.forEach((nome, valor) -> System.out.println(nome + " " + valor));
Como imprir isso? Tentei no exemplo abaixo mas não consegui;
List lista = filme.stream() .filter(c -> c.getValor() > 50) .collect(Collectors.toList());
lista.forEach((nome, valor) -> System.out.println(nome + " " + valor));
alguem, pode dar um help
Hey Bruno, beleza?
Para que o código funcione da forma esperada, exibindo os valores de cada atributo e não usando o método 'toString' da classe Filme para exibir o objeto completo (suponho que exista a classe Filme, contendo os atributos nome e valor correto?), será necessário coletar a lista filtrada transformando em um Map:
List<Filme> filmesList = new ArrayList<>();
filmesList.add(new Filme("O Senhor dos Anéis: A Sociedade do Anel", 60));
filmesList.add(new Filme("Shazam", 45));
filmesList.add(new Filme("Batman", 55));
filmesList.add(new Filme("Beatle Juice", 35));
Map<String, Double> lista = filmesList.stream()
.filter(f -> f.getValor() > 50)
.collect(Collectors.toMap(Filme::getNome, Filme::getValor));
lista.forEach((nome, valor) -> System.out.println(nome + " " + valor));
Ou, extrair a ação de imprimir os atributos de forma apartada para outro método (não sei se seria uma abordagem correta):
public static void main(String[] args) {
List<Filme> filmesList = new ArrayList<>();
filmesList.add(new Filme("O Senhor dos Anéis: A Sociedade do Anel", 60));
filmesList.add(new Filme("Shazam", 45));
filmesList.add(new Filme("Batman", 55));
filmesList.add(new Filme("Beatle Juice", 35));
List lista = filmesList.stream().filter(c -> c.getValor() > 50)
.collect(Collectors.toList());
lista.forEach(f -> imprimeFilme((Filme) f));
}
public static void imprimeFilme(Filme f) {
System.out.println(f.getNome() + " " + f.getValor());
}
Devido ao uso do generics, entendo que o .forEach recebe uma ação que não consegue acessar os métodos do Objeto que está recebendo, já que não consegue fazer o casting, pois não sabe de qual objeto se trata.
Espero ter ajudado...
Abs, ;)
Eu apostaria na segunda sugestão dada pela Gabriela, apesar de eu acreditar que, diferente do que ela disse, o método forEach saiba o tipo tratado na lista, já que no exemplo ela usou List para objetos Filme. Não testei, mas acredito que funcionaria como abaixo.
lista.forEach(f -> System.out.println(f.getNome() + " " + f.getValor() );