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));
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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() );