Skip to content

Commit 8d5042a

Browse files
#22 java
1 parent b6d13d9 commit 8d5042a

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import java.time.LocalDate;
2+
import java.util.ArrayList;
3+
import java.util.Arrays;
4+
import java.util.Comparator;
5+
import java.util.List;
6+
import java.util.function.Function;
7+
8+
public class martinbohorquez {
9+
10+
public static void main(String[] args) {
11+
//Función como argumento
12+
String name = "MartinDev";
13+
System.out.printf("La longitud '%s' es: %s%n", name, applyFunction(String::length, name));
14+
System.out.printf("El nombre '%s' en mayúscula es: %s%n", name, applyFunction(String::toUpperCase, name));
15+
16+
//Retorno de función
17+
int intA = 3;
18+
int intB = 4;
19+
System.out.printf("La multiplicación de %d y %d es: %d%n", intA, intB, applyMultiplier(intA).apply(intB));
20+
//Uso de API Stream con interfaces funcionales: Predicate<T>, Function<T, R>, Consumer<T>, Supplier<R>,
21+
// BiPredicate<T, U>, BiFunction<T, U, R>, BiConsumer<T, U>, UnaryOperator<T>, BinaryOperator<T>
22+
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 3, 4, 2, 5));
23+
System.out.printf("La lista de números '%s' multiplicada por 2 es: %s%n", numbers,
24+
numbers.stream().map(n -> n * 2).toList()); //<R> Stream<R> map(Function<? super T, ? extends R> mapper)
25+
System.out.printf("La lista de números '%s' filtrada por números pares es: %s%n", numbers,
26+
numbers.stream().filter(n -> n % 2 == 0).toList()); //Stream<T> filter(Predicate<? super T> predicate)
27+
System.out.printf("La lista de números '%s' ordenada de forma ascendente es: %s%n", numbers,
28+
numbers.stream().sorted().toList());
29+
System.out.printf("La lista de números '%s' ordenada de forma descendente es: %s%n", numbers,
30+
numbers.stream().sorted().toList().reversed());
31+
System.out.printf("La lista de números '%s' ordenada de forma descendente es: %s%n", numbers,
32+
numbers.stream().sorted(Comparator.reverseOrder()).toList()); //Uso de Comparator
33+
//UnaryOperator<T> == Function<T, R> cuando las clases T, U son iguales.
34+
//BinaryOperator<T> == BiFunction<T, U, R> cuando las clases T, U, R son iguales.
35+
System.out.printf("La suma de todos los elementos de la lista '%s' es: %d%n", numbers,
36+
numbers.stream().reduce(0, Integer::sum)); //T reduce(T identity, BinaryOperator<T> accumulator)
37+
38+
/*
39+
* DIFICULTAD EXTRA
40+
*/
41+
List<Student> students = Arrays.asList(
42+
new Student("Piero", LocalDate.of(1997, 12, 23), Arrays.asList(9.0, 9.0, 9.5)),
43+
new Student("Katherine", LocalDate.of(1996, 6, 1), Arrays.asList(9.5, 9.0, 9.5)),
44+
new Student("Marshall", LocalDate.of(1994, 3, 18), Arrays.asList(8.0, 7.5, 8.0)),
45+
new Student("Martin", LocalDate.of(1994, 9, 20), Arrays.asList(9.0, 9.7, 9.5)),
46+
new Student("Jimena", LocalDate.of(1997, 4, 29), Arrays.asList(8.5, 9.5, 9.5)),
47+
new Student("Marcos", LocalDate.of(1995, 9, 20), Arrays.asList(8.0, 8.0, 9.5))
48+
);
49+
50+
System.out.printf("La lista de estudiantes con su respectivo promedio de calificaciones es: %n%s%n",
51+
students.stream().map(Student::toStringNameAveragegradePoint).toList());
52+
53+
System.out.printf("La lista de estudiantes con promedio de calificaciones mayores a 9 es: %s%n",
54+
students.stream()
55+
.filter(s -> s.getAverageGradePoint() > 9)
56+
.map(Student::getName)
57+
.toList());
58+
59+
students.sort(Comparator.comparing(Student::getBirthDate));
60+
System.out.printf("La lista de estudiantes ordenada por edad (ascendente) es: %s%n",
61+
students.stream()
62+
.map(Student::getName)
63+
.toList());
64+
65+
System.out.printf("La calificación más alta entre la de todos los alumnos es: %.2f%n",
66+
students.stream()
67+
.map(student -> student.getGradesList().stream().max(Double::compareTo).orElse(0.0))
68+
.max(Double::compareTo)
69+
.orElse(0.00));
70+
71+
72+
System.out.printf("La calificación más alta entre la de todos los alumnos es: %.2f%n",
73+
students.stream()
74+
.flatMap(s -> s.getGradesList().stream())
75+
.max(Double::compareTo)
76+
.orElse(0.00));
77+
78+
}
79+
80+
private static Function<Integer, Integer> applyMultiplier(int n) {
81+
return x -> x * n;
82+
}
83+
84+
public static <T, R> R applyFunction(Function<T, R> function, T x) {
85+
return function.apply(x);
86+
}
87+
88+
private static class Student {
89+
private String name;
90+
private LocalDate birthDate;
91+
private List<Double> gradesList;
92+
93+
public Student(String name, LocalDate birthDate, List<Double> gradesList) {
94+
this.name = name;
95+
this.birthDate = birthDate;
96+
this.gradesList = gradesList;
97+
}
98+
99+
public String getName() {
100+
return name;
101+
}
102+
103+
public LocalDate getBirthDate() {
104+
return birthDate;
105+
}
106+
107+
public List<Double> getGradesList() {
108+
return gradesList;
109+
}
110+
111+
public Double getAverageGradePoint() {
112+
return getGradesList().stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
113+
}
114+
115+
public String toStringNameAveragegradePoint() {
116+
String averageGradePoint = String.format("%.2f", getAverageGradePoint());
117+
return "{name = '" + name + "', " +
118+
"average = " + averageGradePoint + "}";
119+
}
120+
}
121+
}

0 commit comments

Comments
 (0)