diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ecfa399..e0472d0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,11 +6,13 @@ + + diff --git a/.idea/junitgenerator-prj-settings.xml b/.idea/junitgenerator-prj-settings.xml new file mode 100644 index 0000000..d73e792 --- /dev/null +++ b/.idea/junitgenerator-prj-settings.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/modern-java/pom.xml b/modern-java/pom.xml new file mode 100644 index 0000000..6b569dd --- /dev/null +++ b/modern-java/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + modern-java + jar + + + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + + + + + fpgym + org.gym.fp + 1.0 + + + + 9 + 9 + + + + + org.projectlombok + lombok + + + junit + junit + test + + + + diff --git a/modern-java/src/main/java/org/gym/fp/moderjava/Dish.java b/modern-java/src/main/java/org/gym/fp/moderjava/Dish.java new file mode 100644 index 0000000..fcdfdc0 --- /dev/null +++ b/modern-java/src/main/java/org/gym/fp/moderjava/Dish.java @@ -0,0 +1,26 @@ +package org.gym.fp.moderjava; + +import lombok.AllArgsConstructor; +import lombok.Value; + +@Value +@AllArgsConstructor +public final class Dish { + private final String name; + private final int calories; + private final Type type; + + public enum Type { + MEAT, FISH, VEGETARIAN, OTHER + } + + public boolean isVegetarian() { + return this.type == Type.VEGETARIAN; + } + + @Override + public String toString() { + return name; + } + +} diff --git a/modern-java/src/main/java/org/gym/fp/moderjava/StreamTest.java b/modern-java/src/main/java/org/gym/fp/moderjava/StreamTest.java new file mode 100644 index 0000000..5741c61 --- /dev/null +++ b/modern-java/src/main/java/org/gym/fp/moderjava/StreamTest.java @@ -0,0 +1,78 @@ +package org.gym.fp.moderjava; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static java.lang.System.out; + +public class StreamTest { + + public static void main(String[] args) { + doStreamFilterDemo(); + doStreamMappingDemo(); + } + + private static void doStreamFilterDemo() { + out.println("FILTER EXAMPLE"); + getDishes().stream() + .filter(Dish::isVegetarian) + .collect(Collectors.toList()) + .forEach(out::println); + out.println("----------------------------------------"); + out.println("DISTINCT EXAMPLE"); + getDishes().stream() + .filter(dish -> dish.getName().length() > 4) + .distinct() + .forEach(out::println); + out.println("----------------------------------------"); + out.println("TAKEWHILE EXAMPLE"); + getDishes().stream() + .takeWhile(dish -> dish.getCalories() > 40) + .forEach(out::println); + out.println("----------------------------------------"); + out.println("DROPWHILE EXAMPLE"); + getDishes().stream() + .dropWhile(dish -> dish.getCalories() > 40) + .forEach(out::println); + out.println("----------------------------------------"); + } + + private static void doStreamMappingDemo() { + List words = Arrays.asList("Hello", "World"); + List uniqueCharacters = words.stream() + .map(word -> word.split("")) + .flatMap(Arrays::stream) + .distinct() + .collect(Collectors.toList()); + out.println(uniqueCharacters); + out.println("----------------------------------------"); + List numbers1 = Arrays.asList(1, 2, 3); + List numbers2 = Arrays.asList(3, 4); + List pairs1 = numbers1.stream() + .flatMap(i -> numbers2.stream().map(j -> new int[]{i, j})) + .collect(Collectors.toList()); + pairs1.forEach(pair -> out.println(Arrays.toString(pair))); + out.println("----------------------------------------"); + List pairs2 = numbers1.stream() + .flatMap(i -> numbers2.stream().map(j -> new int[]{i, j})) + .filter(pair -> (pair[0] + pair[1]) % 3 == 0) + .collect(Collectors.toList()); + pairs2.forEach(pair -> out.println(Arrays.toString(pair))); + } + + private static List getDishes() { + List dishes = Arrays.asList( + new Dish("pork", 300, Dish.Type.MEAT), + new Dish("salad", 50, Dish.Type.VEGETARIAN), + new Dish("chicken", 100, Dish.Type.MEAT), + new Dish("chicken", 100, Dish.Type.MEAT), + new Dish("tomato", 30, Dish.Type.VEGETARIAN), + new Dish("tunny", 120, Dish.Type.FISH), + new Dish("potato", 70, Dish.Type.VEGETARIAN) + ); + return Collections.unmodifiableList(dishes); + } + +} diff --git a/pom.xml b/pom.xml index dafdb24..2c0feec 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,8 @@ scala - + modern-java +