summaryrefslogtreecommitdiff
path: root/graphs/java/streamStudent/src/main
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
commitc9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch)
tree3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/java/streamStudent/src/main
add: graphs et rushs
Diffstat (limited to 'graphs/java/streamStudent/src/main')
-rw-r--r--graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Pair.java67
-rw-r--r--graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Streamer.java58
2 files changed, 125 insertions, 0 deletions
diff --git a/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Pair.java b/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Pair.java
new file mode 100644
index 0000000..c3cde84
--- /dev/null
+++ b/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Pair.java
@@ -0,0 +1,67 @@
+package fr.epita.assistants.streamstudent;
+
+public class Pair<K, V> {
+
+ /**
+ * Key of this pair.
+ */
+ private K key;
+
+ /**
+ * Gets the key for this pair.
+ *
+ * @return key for this pair
+ */
+ public K getKey() {
+ return key;
+ }
+
+ /**
+ * Value of this pair.
+ */
+ private V value;
+
+ /**
+ * Gets the value for this pair.
+ *
+ * @return value for this pair
+ */
+ public V getValue() {
+ return value;
+ }
+
+ /**
+ * Creates a new pair.
+ *
+ * @param key The key for this pair
+ * @param value The value to use for this pair
+ */
+ public Pair(K key, V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+
+ @Override
+ public int hashCode() {
+ return key.hashCode() * 13 + (value == null ? 0 : value.hashCode());
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o instanceof Pair) {
+ Pair pair = (Pair) o;
+ if (key != null ? !key.equals(pair.key) : pair.key != null) return false;
+ if (value != null ? !value.equals(pair.value) : pair.value != null) return false;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "(" + key + ", " + value + ")";
+ }
+}
+
diff --git a/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Streamer.java b/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Streamer.java
new file mode 100644
index 0000000..87654a4
--- /dev/null
+++ b/graphs/java/streamStudent/src/main/java/fr/epita/assistants/streamstudent/Streamer.java
@@ -0,0 +1,58 @@
+package fr.epita.assistants.streamstudent;
+
+import java.util.Comparator;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+public class Streamer {
+ public Stream<Pair<Integer, String>> validator(Stream<Pair<Integer, String>> stream) {
+ return stream.filter(student -> student.getKey() >= 0 && student.getKey() <= 100 && (Pattern.matches("[^_" +
+ ".]*\\.[^_.]*", student.getValue()) || Pattern.matches("[^._]*_[^._]*", student.getValue())));
+ }
+
+ public Stream<Pair<Integer, String>> orderGrade(Stream<Pair<Integer, String>> stream) {
+ return stream.sorted((i, j) -> {
+ if (!Objects.equals(i.getKey(), j.getKey()))
+ return i.getKey().compareTo(j.getKey());
+ else
+ return i.getValue().compareTo(j.getValue());
+ });
+ }
+
+ public Stream<Pair<Integer, String>> lowercase(Stream<Pair<Integer, String>> stream) {
+ return stream.map(i -> {
+ if (Pattern.matches(".*[A-Z]+.*", i.getValue())) {
+ return new Pair<>(i.getKey() / 2, i.getValue().toLowerCase());
+ } else
+ return new Pair<>(i.getKey(), i.getValue().toLowerCase());
+ });
+ }
+
+ public Optional<Pair<Integer, String>> headOfTheClass(Stream<Pair<Integer, String>> stream) {
+ return stream.max((i, j) -> {
+ if (j.getKey().equals(i.getKey()))
+ return j.getValue().compareTo(i.getValue());
+ else
+ return i.getKey().compareTo(j.getKey());
+ });
+ }
+
+ public Stream<Pair<Integer, String>> quickFix(Stream<Pair<Integer, String>> stream) {
+ return stream.map(i -> {
+ if (Pattern.matches("[mM][Aa].*", i.getValue()) || Pattern.matches("[lL].*[xX]", i.getValue())) {
+ return new Pair<>(Math.clamp(i.getKey() * 2, 0, 100), i.getValue());
+ } else return i;
+ });
+ }
+
+ public Stream<Pair<Integer, String>> encryption(Stream<Pair<Integer, String>> stream) {
+ return stream.map(i -> {
+ StringBuilder sb = new StringBuilder();
+ sb.append(i.getValue(), i.getValue().length() / 2, i.getValue().length());
+ sb.append(i.getValue(), 0, i.getValue().length() / 2);
+ return new Pair<>(i.getKey(), sb.toString());
+ });
+ }
+}