package market;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
class Curso {
private String nome;
private int alunos;
public Curso(String nome, int alunos) {
this.nome = nome;
this.alunos = alunos;
}
public int getAlunos() {
return alunos;
}
public String getNome() {
return nome;
}
@Override
public String toString() {
return nome + " - " + alunos;
}
}
class ExemploCursos {
public static void main(String[] args) {
List<Curso> cursos = new ArrayList<Curso>();
cursos.add(new Curso("Python", 45));
cursos.add(new Curso("JavaScript", 150));
cursos.add(new Curso("Java", 113));
cursos.add(new Curso("C", 55));
// ordenar usando lambda e comparator
cursos.sort(Comparator.comparing(c -> c.getAlunos()));
// iterar todos os cursos e imprimir usando lambda
cursos.forEach(c -> System.out.println(c.getNome()));
Saída
Python
C
Java
JavaScript
// cursos que tem mais de 100 alunos
cursos.stream().filter(c -> c.getAlunos() > 100).forEach(System.out::println);
Saída
Java - 113
JavaScript - 150
// lista somente o numero de alunos de cursos que tem mais 100 alunos
cursos.stream().filter(c -> c.getAlunos() > 100).map(c -> c.getAlunos()).forEach(System.out::println);
Saída
113
150
// soma o anterior
int soma = cursos.stream().filter(c -> c.getAlunos() > 100).mapToInt(Curso::getAlunos).sum();
System.out.println(soma);
Saída
263
// retorna um curso que tenha +100 alunos
Optional<Curso> opcionalCurso = cursos.stream().filter(c -> c.getAlunos() > 100).findAny();
Curso localCurso = opcionalCurso.orElse(null);
System.out.println(localCurso);
Saída
Java - 113
// se tem, imprima
opcionalCurso.ifPresent(c -> System.out.println(c));
Saída
Java - 113
// valor medio
OptionalDouble media = cursos.stream().filter(c -> c.getAlunos() > 100).mapToInt(Curso::getAlunos).average();
System.out.println(media.orElse(0));
Saída
131.5
// transforma um stream em uma List
List<Curso> novaLista = cursos.stream().filter(c -> c.getNome().charAt(0) == 'J').collect(Collectors.toList());
novaLista.forEach(System.out::println);
Saída
Java - 113
JavaScript - 150
System.out.println(novaLista);
Saída
[Java - 113, JavaScript - 150]
// transforma um stream em uma Map (chave e valor)
Map<String, Integer> novaMap = cursos.stream().filter(c -> c.getNome().charAt(0) == 'J')
.collect(Collectors.toMap(c -> c.getNome(), c -> c.getAlunos()));
novaMap.forEach((nome, alunos) -> System.out.println(nome + " tem " + alunos + " alunos"));
Saída
Java tem 113 alunos
JavaScript tem 150 alunos
System.out.println(novaMap);
Saída
{Java=113, JavaScript=150}
}
}