Skip to content

Commit 10d87f6

Browse files
AnaLauDBGallitofast
authored andcommitted
mouredev#22 - Java
1 parent 23d3e85 commit 10d87f6

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import java.util.*;
2+
import java.util.stream.Collectors;
3+
import java.time.LocalDate;
4+
import java.util.function.*;
5+
6+
public class AnaLauDB {
7+
8+
// Clase Estudiante para la dificultad extra
9+
static class Estudiante {
10+
private String nombre;
11+
private LocalDate fechaNacimiento;
12+
private List<Double> calificaciones;
13+
14+
public Estudiante(String nombre, LocalDate fechaNacimiento, List<Double> calificaciones) {
15+
this.nombre = nombre;
16+
this.fechaNacimiento = fechaNacimiento;
17+
this.calificaciones = calificaciones;
18+
}
19+
20+
public String getNombre() {
21+
return nombre;
22+
}
23+
24+
public LocalDate getFechaNacimiento() {
25+
return fechaNacimiento;
26+
}
27+
28+
public List<Double> getCalificaciones() {
29+
return calificaciones;
30+
}
31+
32+
public double getPromedio() {
33+
return calificaciones.stream()
34+
.mapToDouble(Double::doubleValue)
35+
.average()
36+
.orElse(0.0);
37+
}
38+
39+
@Override
40+
public String toString() {
41+
return String.format("%s (Promedio: %.2f)", nombre, getPromedio());
42+
}
43+
}
44+
45+
// Ejemplos de funciones de orden superior
46+
public static void ejemplosBasicos() {
47+
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
48+
49+
// 1. map() - transforma cada elemento
50+
List<Integer> cuadrados = numeros.stream()
51+
.map(x -> x * x)
52+
.collect(Collectors.toList());
53+
System.out.println("Cuadrados: " + cuadrados);
54+
55+
// 2. filter() - filtra elementos
56+
List<Integer> pares = numeros.stream()
57+
.filter(x -> x % 2 == 0)
58+
.collect(Collectors.toList());
59+
System.out.println("Números pares: " + pares);
60+
61+
// 3. reduce() - reduce a un solo valor
62+
int suma = numeros.stream()
63+
.reduce(0, (a, b) -> a + b);
64+
System.out.println("Suma total: " + suma);
65+
66+
// 4. forEach() - ejecuta acción en cada elemento
67+
System.out.print("Números: ");
68+
numeros.stream().forEach(x -> System.out.print(x + " "));
69+
System.out.println();
70+
}
71+
72+
// Función que acepta otra función como parámetro
73+
public static <T> List<T> filtrarLista(List<T> lista, Predicate<T> condicion) {
74+
return lista.stream()
75+
.filter(condicion)
76+
.collect(Collectors.toList());
77+
}
78+
79+
// Función que retorna otra función
80+
public static Function<Integer, Integer> multiplicarPor(int factor) {
81+
return x -> x * factor;
82+
}
83+
84+
public static void main(String[] args) {
85+
System.out.println("=== Ejemplos básicos de funciones de orden superior ===");
86+
ejemplosBasicos();
87+
88+
// Ejemplo de función que acepta otra función
89+
List<String> palabras = Arrays.asList("Java", "Python", "JavaScript", "C++");
90+
List<String> palabrasLargas = filtrarLista(palabras, p -> p.length() > 4);
91+
System.out.println("Palabras largas: " + palabrasLargas);
92+
93+
// Ejemplo de función que retorna otra función
94+
Function<Integer, Integer> multiplicarPor3 = multiplicarPor(3);
95+
System.out.println("5 * 3 = " + multiplicarPor3.apply(5));
96+
97+
System.out.println("\n=== DIFICULTAD EXTRA: Análisis de estudiantes ===");
98+
99+
// Crear lista de estudiantes
100+
List<Estudiante> estudiantes = Arrays.asList(
101+
new Estudiante("Ana", LocalDate.of(2000, 5, 15),
102+
Arrays.asList(8.5, 9.0, 7.5, 8.0)),
103+
new Estudiante("Luis", LocalDate.of(1999, 3, 22),
104+
Arrays.asList(9.5, 9.0, 9.8, 9.2)),
105+
new Estudiante("María", LocalDate.of(2001, 8, 10),
106+
Arrays.asList(7.0, 6.5, 8.0, 7.5)),
107+
new Estudiante("Carlos", LocalDate.of(2000, 12, 3),
108+
Arrays.asList(9.0, 9.5, 8.5, 9.8)),
109+
new Estudiante("Sofía", LocalDate.of(2002, 1, 28),
110+
Arrays.asList(6.0, 7.0, 6.5, 7.5)));
111+
112+
// 1. Promedio de calificaciones por estudiante
113+
System.out.println("1. Promedio de calificaciones:");
114+
estudiantes.stream()
115+
.map(e -> e.getNombre() + ": " + String.format("%.2f", e.getPromedio()))
116+
.forEach(System.out::println);
117+
118+
// 2. Mejores estudiantes (promedio >= 9.0)
119+
System.out.println("\n2. Mejores estudiantes (promedio >= 9.0):");
120+
estudiantes.stream()
121+
.filter(e -> e.getPromedio() >= 9.0)
122+
.map(Estudiante::getNombre)
123+
.forEach(System.out::println);
124+
125+
// 3. Estudiantes ordenados por edad (más joven primero)
126+
System.out.println("\n3. Estudiantes ordenados por edad (más joven primero):");
127+
estudiantes.stream()
128+
.sorted((e1, e2) -> e2.getFechaNacimiento().compareTo(e1.getFechaNacimiento()))
129+
.map(e -> e.getNombre() + " (" + e.getFechaNacimiento() + ")")
130+
.forEach(System.out::println);
131+
132+
// 4. Mayor calificación de todos los estudiantes
133+
double mayorCalificacion = estudiantes.stream()
134+
.flatMap(e -> e.getCalificaciones().stream())
135+
.mapToDouble(Double::doubleValue)
136+
.max()
137+
.orElse(0.0);
138+
System.out.println("\n4. Mayor calificación: " + mayorCalificacion);
139+
}
140+
}

0 commit comments

Comments
 (0)