Dada la siguiente clase.
package main;
public class Curso {
private String titulo;
private float duracion; //Expresada en horas
private int videos; //cantidad de vídeos
private int alumnos; //Cantidad de alumnos
public Curso(String titulo, float duracion, int videos, int alumnos) {
this.titulo = titulo;
this.duracion = duracion;
this.videos = videos;
this.alumnos = alumnos;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public float getDuracion() {
return duracion;
}
public void setDuracion(float duracion) {
this.duracion = duracion;
}
public int getVideos() {
return videos;
}
public void setVideos(int videos) {
this.videos = videos;
}
public int getAlumnos() {
return alumnos;
}
public void setAlumnos(int alumnos) {
this.alumnos = alumnos;
}
}
y la siguiente colección. (Si así lo deseas puedes agrear o modificar elementos para obtener un mejor resultado)
List<Curso> cursos = new ArrayList<>();
cursos.add(new Curso("Cursos profesional de Java", 6.5f, 50, 200 ));
cursos.add(new Curso("Cursos profesional de Python", 8.5f, 60, 800 ));
cursos.add(new Curso("Cursos profesional de DB", 4.5f, 70, 700 ));
cursos.add(new Curso("Cursos profesional de Android", 7.5f, 10, 400 ));
cursos.add(new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 ));
Resolver los siguientes problemas.
- Obtener la cantidad de cursos con una duración mayor a 5 horas.
- Obtener la cantidad de cursos con una duración menor a 2 horas.
- Listar el título de todos aquellos cursos con una cantidad de vídeos mayor a 50.
- Mostrar en consola el título de los 3 cursos con mayor duración.
- Mostrar en consola la duración total de todos los cursos.
- Mostrar en consola todos aquellos libros que superen el promedio en cuanto a duración se refiere.
- Mostrar en consola la duración de todos aquellos cursos que tengan una cantidad de alumnos inscritos menor a 500.
- Obtener el curso con mayor duración.
- Crear una lista de Strings con todos los titulos de los cursos.
-
check_circle_outlineMódulo 1 | 2 clases
Introducción
expand_more -
check_circle_outlineMódulo 2 | 6 clases
Expresiones lambda
expand_more -
check_circle_outlineMódulo 3 | 19 clases
API Stream
expand_more-
done_all
Clase 1
API Stream
-
done_all
Clase 2
Filtrar elementos
-
done_all
Clase 3
Formas de crear Streams
-
done_all
Clase 4
Tipos de métodos
-
done_all
Clase 5
Convertir a listas
-
done_all
Clase 6
Transformar valores
-
done_all
Clase 7
Método Map
-
done_all
Clase 8
Unir colecciones
-
done_all
Clase 9
ForEach
-
done_all
Clase 10
Encontrar elementos pt1
-
done_all
Clase 11
Encontrar elementos pt2
-
done_all
Clase 12
Funciones matemáticas
-
done_all
Clase 13
Reducción de elementos
-
done_all
Clase 14
Elementos unicos
-
done_all
Clase 15
Ordenamiento pt1
-
done_all
Clase 16
Ordenamiento pt2
-
done_all
Clase 17
Comparador
-
done_all
Clase 18
Saltos
-
done_all
Clase 19
Ejercicios stream Java
-
-
check_circle_outlineMódulo 4 | 5 clases
Métodos por referencia
expand_more
8 comentario(s)
Buenas, paso mi resolucion de los ejercicios
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List cursos = new ArrayList<>();
cursos.add(new Curso("Cursos profesional de Java", 6.5f, 50, 200 ));
cursos.add(new Curso("Cursos profesional de Python", 8.5f, 60, 800 ));
cursos.add(new Curso("Cursos profesional de DB", 4.5f, 70, 700 ));
cursos.add(new Curso("Cursos profesional de Android", 7.5f, 10, 400 ));
cursos.add(new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 ));
Comparator<Curso> comparatorDuracion = Comparator.comparing(curso -> curso.getDuracion());
// 1) Obtener la cantidad de cursos con una duración mayor a 5 horas.
System.out.println("Punto 1:");
long cantCursosMayor5Horas = cursos.stream().filter(duracion -> duracion.getDuracion() > 5).count();
System.out.println(cantCursosMayor5Horas);
System.out.println("");
// 2) Obtener la cantidad de cursos con una duración menor a 2 horas.
System.out.println("Punto 2:");
long cantCursosMenor2Horas = cursos.stream().filter(duracion -> duracion.getDuracion() < 2).count();
System.out.println(cantCursosMenor2Horas);
System.out.println("");
// 3) Listar el título de todos aquellos cursos con una cantidad de vídeos mayor a 50.
System.out.println("Punto 3:");
cursos.stream().filter(duracion -> duracion.getVideos() > 50).forEach(curso -> System.out.println(curso.getTitulo()));
System.out.println("");
// 4) Mostrar en consola el título de los 3 cursos con mayor duración.
System.out.println("Punto 4:");
cursos.stream().sorted(comparatorDuracion.reversed()).limit(3).forEach(curso -> System.out.println(curso.getTitulo()));
System.out.println("");
// 5) Mostrar en consola la duración total de todos los cursos.
System.out.println("Punto 5:");
double duracionTotal = cursos.stream().mapToDouble(curso -> curso.getDuracion()).sum();
System.out.println(duracionTotal);
System.out.println("");
// 6) Mostrar en consola todos aquellos titulos que superen el promedio en cuanto a duración se refiere.
System.out.println("Punto 6:");
double promedioDuracion = cursos.stream().mapToDouble(curso -> curso.getDuracion()).average().orElse(0);
List<String> librosSuperanPromedio = cursos.stream()
.filter(curso -> curso.getDuracion() > promedioDuracion)
.map(curso -> curso.getTitulo())
.collect(Collectors.toList());
System.out.println(librosSuperanPromedio);
System.out.println("");
// 7) Mostrar en consola la duración de todos aquellos cursos que tengan una cantidad de alumnos inscritos menor a 500.
System.out.println("Punto 7:");
cursos.stream().filter(alumno -> alumno.getAlumnos() < 500).forEach(curso -> System.out.println(curso.getDuracion()));
System.out.println("");
// 8) Obtener el curso con mayor duración.
System.out.println("Punto 8:");
cursos.stream().sorted(comparatorDuracion.reversed()).limit(1).forEach(curso -> System.out.println(curso.getTitulo()));
System.out.println("");
// 9) Crear una lista de Strings con todos los titulos de los cursos.
System.out.println("Punto 9:");
List<String> listaTitulos = cursos.stream().map(curso -> curso.getTitulo()).collect(Collectors.toList());
System.out.println(listaTitulos);
}
}
Paso por aqui la resolucion de estos problemas, por si alguien se queda pillado en alguno.
public class Main { public static void main(String[] args){ List <Curso> cursos = Arrays.asList( new Curso("Cursos profesional de Java", 6.5f, 50, 200 ), new Curso("Cursos profesional de Python", 8.5f, 60, 800 ), new Curso("Cursos profesional de DB", 4.5f, 70, 700 ), new Curso("Cursos profesional de Android", 7.5f, 10, 400 ), new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 ));System.<em>out</em>.println("Obtener la cantidad de cursos con una duración mayor a 5 horas"); <em>lineBreak</em>(); cursos.stream() .filter(curso -> curso.getDuracion()>5.0f) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Obtener la cantidad de cursos con una duración menor a 2 horas."); <em>lineBreak</em>(); cursos.stream() .filter(curso -> curso.getDuracion()<2.0f) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Listar el título de todos aquellos cursos con una cantidad de vídeos mayor a 50."); <em>lineBreak</em>(); cursos.stream() .filter(curso -> curso.getVideos()>50) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Mostrar en consola el título de los 3 cursos con mayor duración."); <em>lineBreak</em>(); cursos.stream() .sorted(Comparator.<em>comparing</em>(Curso::getDuracion).reversed()) .limit(3) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Mostrar en consola la duración total de todos los cursos."); <em>lineBreak</em>(); System.<em>out</em>.println("Duracion total= "+cursos.stream() .mapToDouble(Curso::getDuracion) .sum()); <em>lineBreak</em>(); System.<em>out</em>.println("Mostrar en consola todos aquellos libros que superen el promedio en cuanto a duración se refiere."); <em>lineBreak</em>(); double average = cursos.stream() .mapToDouble(Curso::getDuracion) .average() .orElse(0); System.<em>out</em>.println("Promedio = "+average); cursos.stream() .filter(curso -> curso.getDuracion() > average) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Mostrar en consola la duración de todos aquellos cursos que tengan una cantidad de alumnos inscritos menor a 500."); <em>lineBreak</em>(); cursos.stream() .filter(curso -> curso.getAlumnos()<500) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo()+" = "+curso.getDuracion())); <em>lineBreak</em>(); System.<em>out</em>.println("Obtener el curso con mayor duración."); <em>lineBreak</em>(); double maxDuration = cursos.stream() .mapToDouble(Curso::getDuracion) .max() .getAsDouble(); cursos.stream() .filter(curso -> curso.getDuracion() == maxDuration) .forEach(curso -> System.<em>out</em>.println(curso.getTitulo())); <em>lineBreak</em>(); System.<em>out</em>.println("Crear una lista de Strings con todos los titulos de los cursos."); <em>lineBreak</em>(); List<String> titulos = cursos.stream() .map(Curso::getTitulo) .collect(Collectors.<em>toList</em>()); titulos.forEach(System.<em>out</em>::println); <em>lineBreak</em>(); } public static void lineBreak(){ System.<em>out</em>.println(); }
}
// Obtener la cantidad de cursos con una duración mayor a 5 horas. System.out.println(cursos.stream() .filter(c -> c.getDuracion() > 5) .count()); //Obtener la cantidad de cursos con una duración menor a 2 horas. System.out.println(cursos.stream() .filter(c -> c.getDuracion() < 2) .count()); //Listar el título de todos aquellos cursos con una cantidad de vídeos mayor a 50. List<String> titulos = cursos.stream() .filter(c -> c.getVideos() > 50) .map(c -> c.getTitulo()) .collect(Collectors.toList()); System.out.println(titulos); //Mostrar en consola el título de los 3 cursos con mayor duración. Comparator<Curso> comparator = Comparator.comparing( curso -> curso.getDuracion()); cursos.stream() .sorted( comparator.reversed()) .limit(3) .forEach(c -> System.out.println(c.getTitulo())); // Mostrar en consola la duración total de todos los cursos. System.out.println(cursos.stream() .reduce(0f, (dur, curso) -> dur + curso.getDuracion(), Float::sum)); // Mostrar en consola todos aquellos cursos que superen el promedio en cuanto a duración se refiere. List<Curso> cursosLargos = cursos.stream() .filter(curso -> curso.getDuracion() > cursos.stream() .mapToDouble( c -> c.getDuracion()) .average() .orElse(0)) .collect(Collectors.toList()); System.out.println(cursosLargos); //Mostrar en consola la duración de todos aquellos cursos que tengan una cantidad de alumnos inscritos menor a 500. cursos.stream() .filter(curso -> curso.getAlumnos() < 500) .forEach(curso -> System.out.println(curso.getDuracion())); //Obtener el curso con mayor duración. Curso cursoMasLargo = cursos.stream() .sorted(comparator.reversed()) .findFirst() .orElse(new Curso("Curso Default", 0f, 0, 0 )); System.out.println(cursoMasLargo); //Crear una lista de Strings con todos los titulos de los cursos. List<String> allTittles = cursos.stream() .map(c -> c.getTitulo()) .collect(Collectors.toList()); System.out.println(allTittles);
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Curso> cursos = new ArrayList<Curso>(); cursos.add(new Curso("Cursos profesional de Java", 6.5f, 50, 200 )); cursos.add(new Curso("Cursos profesional de Python", 8.5f, 60, 800 )); cursos.add(new Curso("Cursos profesional de DB", 4.5f, 70, 700 )); cursos.add(new Curso("Cursos profesional de Android", 7.5f, 10, 400 )); cursos.add(new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 )); long respuesta1 = cursos.stream() .filter(curso -> curso.getDuracion() > 5) .count(); System.out.println("cantidad de cursos con una duración mayor a 5 horas: " + respuesta1); long respuesta2 = cursos.stream() .filter(curso -> curso.getDuracion() < 2) .count(); System.out.println("cantidad de cursos con una duración menor a 2 horas: " + respuesta2); List<Curso> respuesta3 = cursos.stream() .filter(curso -> curso.getVideos() > 50) .collect(Collectors.toList()); System.out.println(" cursos con una cantidad de vídeos mayor a 50: \n" + respuesta3); Comparator<Curso> comparator = Comparator.comparing(c -> c.getDuracion()); List<Curso> respuesta4 = cursos.stream() .sorted(comparator.reversed()) .limit(3).collect(Collectors.toList()); System.out.println("los 3 cursos con mayor duración: " + respuesta4); double respuesta5 = cursos.stream().mapToDouble(c -> c.getDuracion()).sum(); System.out.println("duración total de todos los cursos: " + respuesta5); double promedioDuracion = cursos.stream().mapToDouble(c -> c.getDuracion()).sum() / cursos.stream().count(); List<Curso> respuesta6 = cursos.stream() .filter(curso -> curso.getDuracion() > promedioDuracion) .collect(Collectors.toList()); System.out.println("libros que superen el promedio en cuanto a duración se refiere: " + respuesta6); List<Float> respuesta7 = cursos.stream() .filter(curso -> curso.getAlumnos() < 500) .map(c -> c.getDuracion()).collect(Collectors.toList()); System.out.println("duración de todos aquellos cursos que tengan una cantidad de alumnos inscritos menor a 500: " + respuesta7); Curso respuesta8 = cursos.stream().max(Comparator.comparing(c -> c.getDuracion())).get(); System.out.println("curso con mayor duración: " + respuesta8); List<String> respuesta9 = cursos.stream().map(c -> c.getTitulo()).collect(Collectors.toList()); System.out.println("lista de Strings con todos los titulos de los cursos: " + respuesta9); } }
List<Curso> cursos = new ArrayList<>(); cursos.add(new Curso("Cursos profesional de Java", 6.5f, 50, 200 )); cursos.add(new Curso("Cursos profesional de Python", 8.5f, 60, 800 )); cursos.add(new Curso("Cursos profesional de DB", 4.5f, 70, 700 )); cursos.add(new Curso("Cursos profesional de Android", 7.5f, 10, 400 )); cursos.add(new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 )); cursos.stream().reduce("", (acumulador, itemCurso) -> acumulador + ", " + itemCurso.getTitulo());
Al utilizar la anterior instrucción me dice que no se puede convertir String a Curso ¿Cómo sería la forma correcta de resolver el ejercicio con reduce?:
List<Curso> cursos = new ArrayList<>(); cursos.add(new Curso("Cursos profesional de Java", 6.5f, 50, 200 )); cursos.add(new Curso("Cursos profesional de Python", 8.5f, 60, 800 )); cursos.add(new Curso("Cursos profesional de DB", 4.5f, 70, 700 )); cursos.add(new Curso("Cursos profesional de Android", 7.5f, 10, 400 )); cursos.add(new Curso("Cursos profesional de Escritura", 1.5f, 10, 300 ));
String resultado = cursos.stream().map( curso -> curso.getTitulo() ).collect( Collectors.joining(", ") );
System.out.println(resultado);
Espero les sea de ayuda
De esa forma se reafirmaría el conocimiento de éste curso e incorporaría algo nuevo y potente como spring.
Saludos