diff --git a/.idea/compiler.xml b/.idea/compiler.xml index e0472d0..98acc8b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -8,10 +8,12 @@ + + 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 index 5741c61..18053bb 100644 --- a/modern-java/src/main/java/org/gym/fp/moderjava/StreamTest.java +++ b/modern-java/src/main/java/org/gym/fp/moderjava/StreamTest.java @@ -1,9 +1,8 @@ package org.gym.fp.moderjava; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.lang.System.out; @@ -12,6 +11,8 @@ public class StreamTest { public static void main(String[] args) { doStreamFilterDemo(); doStreamMappingDemo(); + doStreamFindOrMatchingDemo(); + doStreamReducingDemo(); } private static void doStreamFilterDemo() { @@ -48,6 +49,7 @@ public class StreamTest { .collect(Collectors.toList()); out.println(uniqueCharacters); out.println("----------------------------------------"); + out.println("Permutations"); List numbers1 = Arrays.asList(1, 2, 3); List numbers2 = Arrays.asList(3, 4); List pairs1 = numbers1.stream() @@ -60,6 +62,91 @@ public class StreamTest { .filter(pair -> (pair[0] + pair[1]) % 3 == 0) .collect(Collectors.toList()); pairs2.forEach(pair -> out.println(Arrays.toString(pair))); + out.println("----------------------------------------"); + } + + private static void doStreamFindOrMatchingDemo() { + out.println("ANYMATCH EXAMPLE"); + if (getDishes().stream().anyMatch(Dish::isVegetarian)) { + out.println("The menu is (somewhat) vegetarian friendly!!!"); + } + out.println("----------------------------------------"); + out.println("ALLMATCH EXAMPLE"); + if (getDishes().stream().allMatch(dish -> dish.getCalories() < 1000)) { + out.println("This menĂ¹ is healthy"); + } + out.println("----------------------------------------"); + out.println("NONEMATCH EXAMPLE"); + if (getDishes().stream().noneMatch(dish -> dish.getCalories() >= 1000)) { + out.println("This menĂ¹ is healthy"); + } + out.println("----------------------------------------"); + out.println("FINDANY EXAMPLE"); + Optional dish = getDishes().stream() + .filter(Dish::isVegetarian) + .findAny(); + dish.ifPresent(out::println); + out.println("----------------------------------------"); + out.println("FINDFIRST EXAMPLE"); + List someNumbers = Arrays.asList(1, 2, 3, 4, 5); + someNumbers.stream() + .map(n -> n * n) + .filter(n -> n % 3 == 0) + .findFirst() + .ifPresent(out::println); + out.println("----------------------------------------"); + } + + private static void doStreamReducingDemo() { + out.println("REDUCING"); + int sum = Stream.of(4, 5, 3, 9).reduce(0, Integer::sum); + out.println(sum); + out.println("----------------------------------------"); + out.println("MAX & MIN"); + Stream.of(4, 5, 3, 9).reduce(Integer::max).ifPresent(out::println); + Stream.of(4, 5, 3, 9).reduce(Integer::min).ifPresent(out::println); + out.println("----------------------------------------"); + out.println("COUNT DISHES"); + getDishes().stream() + .map(d -> 1) + .reduce(Integer::sum) + .ifPresent(out::println); + out.println("----------------------------------------"); + out.println("PUTTING ALL IN PRACTICE"); + Trader raoul = new Trader("Raoul", "Cambridge"); + Trader mario = new Trader("Mario", "Milan"); + Trader alan = new Trader("Alan", "Cambridge"); + Trader brian = new Trader("Brian", "Cambridge"); + List transactions = Arrays.asList( + new Transaction(brian, 2011, 300), + new Transaction(raoul, 2012, 1000), + new Transaction(raoul, 2011, 400), + new Transaction(mario, 2012, 710), + new Transaction(mario, 2012, 700), + new Transaction(alan, 2012, 950) + ); + out.println("1)"); + transactions.stream() + .filter(t -> t.getYear() == 2011) + .sorted(Comparator.comparing(Transaction::getValue)) + .collect(Collectors.toList()) + .forEach(out::println); + out.println("2)"); + transactions.stream() + .map(Transaction::getTrader) + .map(Trader::getCity) + .distinct() + .collect(Collectors.toList()) + .forEach(out::println); + out.println("3)"); + transactions.stream() + .map(Transaction::getTrader) + .filter(trader -> "Cambridge".equalsIgnoreCase(trader.getCity())) + .sorted(Comparator.comparing(Trader::getName)) + .collect(Collectors.toList()) + .forEach(out::println); + + out.println("----------------------------------------"); } private static List getDishes() { @@ -71,7 +158,7 @@ public class StreamTest { 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/modern-java/src/main/java/org/gym/fp/moderjava/Trader.java b/modern-java/src/main/java/org/gym/fp/moderjava/Trader.java new file mode 100644 index 0000000..8315453 --- /dev/null +++ b/modern-java/src/main/java/org/gym/fp/moderjava/Trader.java @@ -0,0 +1,11 @@ +package org.gym.fp.moderjava; + +import lombok.AllArgsConstructor; +import lombok.Value; + +@Value +@AllArgsConstructor +public class Trader { + private final String name; + private final String city; +} diff --git a/modern-java/src/main/java/org/gym/fp/moderjava/Transaction.java b/modern-java/src/main/java/org/gym/fp/moderjava/Transaction.java new file mode 100644 index 0000000..b5a0aa5 --- /dev/null +++ b/modern-java/src/main/java/org/gym/fp/moderjava/Transaction.java @@ -0,0 +1,12 @@ +package org.gym.fp.moderjava; + +import lombok.AllArgsConstructor; +import lombok.Value; + +@Value +@AllArgsConstructor +public class Transaction { + private final Trader trader; + private final int year; + private final int value; +} diff --git a/pom.xml b/pom.xml index 2c0feec..11f7a65 100644 --- a/pom.xml +++ b/pom.xml @@ -11,8 +11,8 @@ scala - modern-java - + modern-java +