diff options
Diffstat (limited to 'graphs/java/streamStudent')
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 |
