summaryrefslogtreecommitdiff
path: root/graphs/java/streamStudent
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
add: graphs et rushs
Diffstat (limited to 'graphs/java/streamStudent')
-rw-r--r--graphs/java/streamStudent/.gitignore38
-rw-r--r--graphs/java/streamStudent/pom.xml138
-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
-rw-r--r--graphs/java/streamStudent/src/test/java/fr/epita/assistants/streamstudent/StreamStudentTest.java63
5 files changed, 364 insertions, 0 deletions
diff --git a/graphs/java/streamStudent/.gitignore b/graphs/java/streamStudent/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/graphs/java/streamStudent/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store \ No newline at end of file
diff --git a/graphs/java/streamStudent/pom.xml b/graphs/java/streamStudent/pom.xml
new file mode 100644
index 0000000..d304253
--- /dev/null
+++ b/graphs/java/streamStudent/pom.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>fr.epita.assistants</groupId>
+ <artifactId>streamStudent</artifactId>
+ <version>1.0</version>
+
+ <properties>
+ <versions.java>21</versions.java>
+ <versions.junit>5.9.1</versions.junit>
+ <versions.maven-compiler-plugin>3.13.0</versions.maven-compiler-plugin>
+ <versions.maven-surefire-plugin>3.5.0</versions.maven-surefire-plugin>
+ <versions.maven-jar-plugin>3.1.1</versions.maven-jar-plugin>
+ <versions.maven-install-plugin>3.1.0</versions.maven-install-plugin>
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+ <surefire.reportsDirectory>${project.build.directory}/surefire-reports</surefire.reportsDirectory>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <version>${versions.junit}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit-platform</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-monitor</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-filtering</artifactId>
+ <version>3.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>1.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-registry</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>classworlds</groupId>
+ <artifactId>classworlds</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ <version>1.9.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.29.2-GA</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${versions.maven-compiler-plugin}</version>
+ <configuration>
+ <source>${versions.java}</source>
+ <target>${versions.java}</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>${versions.maven-install-plugin}</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ <configuration>
+ <reportsDirectory>${surefire.reportsDirectory}</reportsDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
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());
+ });
+ }
+}
diff --git a/graphs/java/streamStudent/src/test/java/fr/epita/assistants/streamstudent/StreamStudentTest.java b/graphs/java/streamStudent/src/test/java/fr/epita/assistants/streamstudent/StreamStudentTest.java
new file mode 100644
index 0000000..d36fc09
--- /dev/null
+++ b/graphs/java/streamStudent/src/test/java/fr/epita/assistants/streamstudent/StreamStudentTest.java
@@ -0,0 +1,63 @@
+package fr.epita.assistants.streamstudent;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class StreamStudentTest {
+ static void assertStreamEquals(Stream<Pair<Integer, String>> expectedStream,
+ Stream<Pair<Integer, String>> actualStream) {
+ // Get iterators from stream
+ Iterator<Pair<Integer, String>> iterator1 = expectedStream.iterator();
+ Iterator<Pair<Integer, String>> iterator2 = actualStream.iterator();
+
+ while (iterator1.hasNext() && iterator2.hasNext()) {
+ // Get next objects
+ Pair<Integer, String> login1 = iterator1.next();
+ Pair<Integer, String> login2 = iterator2.next();
+
+ // Check if pairs are equal
+ assertEquals(login1, login2);
+ }
+
+ assertTrue(!iterator1.hasNext() && !iterator2.hasNext(),
+ "Streams do not have the same length");
+
+ }
+
+ @Test
+ public void validatorLoginContainsTwoOrMoreUnderscore() {
+ Pair<Integer, String> loginTwoUnderscore = new Pair<>(50, "xavier_login_");
+ Pair<Integer, String> loginValid = new Pair<>(90, "xavierlogin");
+ Pair<Integer, String> loginBoth = new Pair<>(90, "xavier._login");
+ Pair<Integer, String> loginMultipleUnderscord = new Pair<>(10, "_login__x");
+ Streamer streamer = new Streamer();
+
+ var loginList = List.of(loginTwoUnderscore, loginValid, loginBoth, loginMultipleUnderscord);
+
+ var actual = streamer.validator(loginList.stream());
+
+ assertEquals(0, actual.count());
+ }
+
+ @Test
+ public void encrypt1() {
+ Pair<Integer, String> loginTwoUnderscore = new Pair<>(50, "a_b");
+ Pair<Integer, String> xavier = new Pair<>(50, "xavier.login");
+ Pair<Integer, String> loginValid = new Pair<>(90, "thomas.kummel");
+ Pair<Integer, String> loginBoth = new Pair<>(90, "florian.fogliani");
+ Pair<Integer, String> loginMultipleUnderscord = new Pair<>(10, "malo.beauchamps");
+ Streamer streamer = new Streamer();
+
+ var loginList = List.of(loginTwoUnderscore, loginValid, loginBoth, loginMultipleUnderscord, xavier);
+
+ var actual = streamer.encryption(loginList.stream());
+ System.out.println("actual stream: " + actual.toString());
+ }
+
+ // Add your own tests here
+} \ No newline at end of file