Skip to content

Commit cde7a97

Browse files
authored
Merge pull request mouredev#6050 from simonguzman/main
#21 Java #22 - Java
2 parents b32bc86 + 1e21684 commit cde7a97

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import java.util.Random;
2+
import java.util.concurrent.TimeUnit;
3+
4+
public class simonguzman {
5+
public static void main(String[] args) {
6+
//callbackExample();
7+
restaurantExercise();
8+
}
9+
10+
/********************** Ejercicio adicional **********************/
11+
12+
public static void restaurantExercise(){
13+
RestaurantOrder order = new RestaurantOrder();
14+
15+
// Procesar pedido con callbacks
16+
order.processOrder("Pizza",
17+
(dish) -> System.out.println("Confirmación: Se ha confirmado el pedido de " + dish),
18+
(dish) -> System.out.println("Listo: El plato " + dish + " está listo para ser servido"),
19+
(dish) -> System.out.println("Entregado: El plato " + dish + " ha sido entregado")
20+
);
21+
}
22+
public static interface ConfirmCallback{
23+
void OnConfirm(String dish);
24+
}
25+
26+
public static interface ReadyCallback{
27+
void OnReady(String dish);
28+
}
29+
30+
public static interface DeliveryCallback{
31+
void OnDelivery(String dish);
32+
}
33+
34+
public static class RestaurantOrder{
35+
private Random random = new Random();
36+
public void processOrder(String dish, ConfirmCallback confirmcallback, ReadyCallback readyCallback, DeliveryCallback deliveryCallback){
37+
confirmcallback.OnConfirm(dish);
38+
proccessRestaurant(dish, confirmcallback, readyCallback, deliveryCallback);
39+
}
40+
41+
public void proccessRestaurant(String dish, ConfirmCallback confirmcallback, ReadyCallback readyCallback, DeliveryCallback deliveryCallback){
42+
43+
try {
44+
int preparationTime = random.nextInt(10) + 1;
45+
TimeUnit.SECONDS.sleep(preparationTime);
46+
47+
readyCallback.OnReady(dish);
48+
49+
int deliveryTime = random.nextInt(10) + 1;
50+
TimeUnit.SECONDS.sleep(deliveryTime);
51+
52+
deliveryCallback.OnDelivery(dish);
53+
} catch (InterruptedException e) {
54+
e.printStackTrace();
55+
}
56+
}
57+
}
58+
59+
/********************** Ejercicio principal - Ejemplo de Callback **********************/
60+
public static void callbackExample(){
61+
System.out.println("Iniciando el programa...");
62+
Processor processor = new Processor();
63+
processor.process(message -> System.out.println("Callback recibido: " + message));
64+
System.out.println("Programa finalizado.");
65+
}
66+
67+
public static interface Callback{
68+
void execute(String message);
69+
}
70+
71+
public static class Processor{
72+
public void process(Callback callback){
73+
System.out.println("Procesando...");
74+
try {
75+
Thread.sleep(2000);
76+
} catch (InterruptedException e) {
77+
e.printStackTrace();
78+
}
79+
callback.execute("Proceso completo");
80+
}
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import java.time.LocalDate;
2+
import java.util.Arrays;
3+
import java.util.List;
4+
import java.util.function.Consumer;
5+
import java.util.function.Function;
6+
import java.util.function.Predicate;
7+
import java.util.function.Supplier;
8+
import java.util.stream.Collectors;
9+
10+
public class simonguzman {
11+
public static void main(String[] args) {
12+
//ejercicioPrincipal();
13+
ejercicioAdicional();
14+
}
15+
16+
/******************** Ejercicio adicional ********************/
17+
public static void ejercicioAdicional(){
18+
List<Estudiante> estudiantes = Arrays.asList(
19+
new Estudiante("Juan", LocalDate.of(2000, 5, 15), Arrays.asList(8.0, 9.0, 10.0)),
20+
new Estudiante("Ana", LocalDate.of(1998, 11, 3), Arrays.asList(9.5, 9.0, 9.7)),
21+
new Estudiante("Carlos", LocalDate.of(2002, 6, 21), Arrays.asList(6.0, 7.5, 8.0))
22+
);
23+
operaciones(estudiantes);
24+
}
25+
26+
public static void operaciones(List<Estudiante> estudiantes){
27+
promedioCalificaciones(estudiantes);
28+
29+
List<String> mejores = mejoresEstudiantes(estudiantes);
30+
System.out.println("Mejores estudiantes: "+mejores);
31+
32+
List<Estudiante> ordenados = ordenarPorNacimiento(estudiantes);
33+
System.out.println("Estudiantes ordenados por nacimiento:");
34+
ordenados.forEach(est -> System.out.println(est.getNombre()));
35+
36+
double mayorCalificacion = obtenerMayorCalificacion(estudiantes);
37+
System.out.println("Mayor calificación: " + mayorCalificacion);
38+
}
39+
40+
public static void promedioCalificaciones(List<Estudiante> estudiantes){
41+
estudiantes.forEach(estudiante -> {
42+
double promedio = estudiante.getPromedio();
43+
System.out.println("Estudiante: "+estudiante.getNombre()+ " ,promedio: "+promedio);
44+
});
45+
}
46+
47+
public static List<String> mejoresEstudiantes(List<Estudiante> estudiantes){
48+
return estudiantes.stream().filter(est -> est.getPromedio() >= 9).map(Estudiante::getNombre).toList();
49+
}
50+
51+
public static List<Estudiante> ordenarPorNacimiento(List<Estudiante> estudiantes){
52+
return estudiantes.stream().sorted((e1, e2) -> e2.getFechaNacimiento().compareTo(e1.getFechaNacimiento())).toList();
53+
}
54+
55+
public static double obtenerMayorCalificacion(List<Estudiante> estudiantes){
56+
return estudiantes.stream().flatMap(est -> est.getCalificaciones().stream()).max(Double::compareTo).orElse(0.0);
57+
}
58+
public static class Estudiante {
59+
private String nombre;
60+
private LocalDate fechaNacimiento;
61+
private List<Double> calificaciones;
62+
63+
public Estudiante(){
64+
65+
}
66+
67+
public Estudiante(String nombre, LocalDate fechaNacimiento, List<Double> calificaciones){
68+
this.nombre = nombre;
69+
this.fechaNacimiento = fechaNacimiento;
70+
this.calificaciones = calificaciones;
71+
}
72+
73+
public String getNombre() {
74+
return nombre;
75+
}
76+
77+
public LocalDate getFechaNacimiento() {
78+
return fechaNacimiento;
79+
}
80+
81+
public List<Double> getCalificaciones() {
82+
return calificaciones;
83+
}
84+
85+
public double getPromedio(){
86+
return calificaciones.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
87+
}
88+
}
89+
90+
/******************** Ejercicio conceptual ********************/
91+
92+
public static void ejercicioPrincipal(){
93+
List<Integer> numeros = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
94+
List<Integer> numerosMultiplicados = multiplicarXDos(numeros);
95+
List<Integer> numerosPares = filtrarNumerosPares(numerosMultiplicados);
96+
imprimirNumeros(numerosPares);
97+
int suma = sumarNumeros(numerosPares);
98+
System.out.println("Suma de los números pares multiplicados por 2: " + suma);
99+
}
100+
101+
public static List<Integer> multiplicarXDos(List<Integer> numeros){
102+
Function<Integer, Integer> multiplicar = (n) -> n * 2;
103+
return numeros.stream().map(multiplicar).collect(Collectors.toList());
104+
}
105+
106+
public static List<Integer> filtrarNumerosPares(List<Integer> numeros){
107+
Predicate<Integer> esPar = (n) -> n % 2 == 0;
108+
return numeros.stream().filter(esPar).collect(Collectors.toList());
109+
}
110+
111+
public static int sumarNumeros(List<Integer> numeros){
112+
Supplier<Integer> sumar = () -> numeros.stream().mapToInt(Integer::intValue).sum();
113+
return sumar.get();
114+
}
115+
116+
public static void imprimirNumeros(List<Integer> numeros){
117+
Consumer<Integer> imprimir = (n) -> System.out.println("Numero: "+n);
118+
numeros.forEach(imprimir);
119+
}
120+
}

0 commit comments

Comments
 (0)