diff --git a/src/com/walking/lesson52_stream_creation/task1/Main.java b/src/com/walking/lesson52_stream_creation/task1/Main.java index 929d71670..7135e430a 100644 --- a/src/com/walking/lesson52_stream_creation/task1/Main.java +++ b/src/com/walking/lesson52_stream_creation/task1/Main.java @@ -1,5 +1,9 @@ package com.walking.lesson52_stream_creation.task1; +import java.util.Random; +import java.util.Scanner; +import java.util.stream.Stream; + /** * Реализуйте задачу 5.1 из урока 4: * ... @@ -7,5 +11,28 @@ */ public class Main { public static void main(String[] args) { + Random random = new Random(); + int randomInt = random.nextInt(1, 10); + + Scanner systemScanner = new Scanner(System.in); + + System.out.println("Угадайте число:"); + + guessNumber(randomInt, systemScanner); + guessNumberAlternative(randomInt, systemScanner); + } + + private static void guessNumber(int number, Scanner scanner) { + Stream.generate(scanner::nextInt) + .takeWhile(i -> i != number) + .forEach(s -> System.out.println("Не угадал")); + } + + private static void guessNumberAlternative(int number, Scanner scanner) { + scanner.tokens() + .map(s -> Integer.toString(number) + .equals(s) ? "Угадал" : "Не угадал") + .peek(System.out::println) + .anyMatch("Угадал"::equals); } } diff --git a/src/com/walking/lesson52_stream_creation/task2_iterate/Main.java b/src/com/walking/lesson52_stream_creation/task2_iterate/Main.java index bd4a6c0d9..ce9a10cff 100644 --- a/src/com/walking/lesson52_stream_creation/task2_iterate/Main.java +++ b/src/com/walking/lesson52_stream_creation/task2_iterate/Main.java @@ -1,10 +1,27 @@ package com.walking.lesson52_stream_creation.task2_iterate; +import java.time.LocalDate; +import java.util.stream.Stream; + /** * Реализуйте программу, выводящую в консоль все даты текущего месяца. * Не используйте Stream.limit() */ public class Main { public static void main(String[] args) { + LocalDate localDate = LocalDate.now(); + + Stream.iterate(localDate.withDayOfMonth(1), d -> d.plusDays(1)) + .takeWhile(d -> d.getMonthValue() == localDate.getMonthValue()) + .forEach(System.out::println); + + Stream.iterate(1, i -> i < localDate.lengthOfMonth(), i -> ++i) + .map(localDate::withDayOfMonth) + .forEach(System.out::println); + + localDate.withDayOfMonth(1) + .datesUntil(localDate.withDayOfMonth(1) + .plusMonths(1)) + .forEach(System.out::println); } } diff --git a/src/com/walking/lesson52_stream_creation/task2_limit/Main.java b/src/com/walking/lesson52_stream_creation/task2_limit/Main.java index f903527b3..12e56fc7f 100644 --- a/src/com/walking/lesson52_stream_creation/task2_limit/Main.java +++ b/src/com/walking/lesson52_stream_creation/task2_limit/Main.java @@ -1,10 +1,23 @@ package com.walking.lesson52_stream_creation.task2_limit; +import java.time.LocalDate; +import java.util.stream.Stream; + /** * Реализуйте программу, выводящую в консоль все даты текущего месяца. * Используйте Stream.limit() */ public class Main { public static void main(String[] args) { + LocalDate localDate = LocalDate.now(); + + Stream.iterate(localDate.withDayOfMonth(1), d -> d.plusDays(1)) + .limit(localDate.lengthOfMonth()) + .forEach(System.out::println); + + Stream.iterate(1, i -> ++i) + .map(localDate::withDayOfMonth) + .limit(localDate.lengthOfMonth()) + .forEach(System.out::println); } } diff --git a/src/com/walking/lesson52_stream_creation/task3_flatMap/Main.java b/src/com/walking/lesson52_stream_creation/task3_flatMap/Main.java index f9faa6675..29eb6aefb 100644 --- a/src/com/walking/lesson52_stream_creation/task3_flatMap/Main.java +++ b/src/com/walking/lesson52_stream_creation/task3_flatMap/Main.java @@ -1,5 +1,9 @@ package com.walking.lesson52_stream_creation.task3_flatMap; +import java.time.LocalDate; +import java.util.stream.IntStream; +import java.util.stream.Stream; + /** * Реализуйте метод, возвращающий Stream из дат месяца, * номер которого был передан параметром. @@ -9,5 +13,23 @@ */ public class Main { public static void main(String[] args) { + IntStream.rangeClosed(1, 12) + .boxed() + .flatMap(Main::getDatesOfMonth) + .forEach(System.out::println); + } + + public static Stream getDatesOfMonth(int monthValue) { + if (monthValue < 1 || monthValue > 12) { + return Stream.empty(); + } + + LocalDate startOfCurrentMonth = LocalDate.now() + .withMonth(monthValue) + .withDayOfMonth(1); + + return Stream.iterate(startOfCurrentMonth, d -> d.plusDays(1)) + .limit(startOfCurrentMonth.lengthOfMonth()) + .map(LocalDate::toString); } } diff --git a/src/com/walking/lesson52_stream_creation/task3_vars/Main.java b/src/com/walking/lesson52_stream_creation/task3_vars/Main.java index 992e35992..6977f8833 100644 --- a/src/com/walking/lesson52_stream_creation/task3_vars/Main.java +++ b/src/com/walking/lesson52_stream_creation/task3_vars/Main.java @@ -1,5 +1,11 @@ package com.walking.lesson52_stream_creation.task3_vars; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; +import java.util.stream.Stream; + /** * Реализуйте метод, возвращающий Stream из дат месяца, * номер которого был передан параметром. @@ -9,5 +15,26 @@ */ public class Main { public static void main(String[] args) { + List> datesOfAllMonth = new ArrayList<>(12); + + IntStream.range(0, 12) + .peek(i -> datesOfAllMonth.add(getDatesOfMonth(++i))) + .mapToObj(datesOfAllMonth::get) + .reduce(Stream.empty(), Stream::concat) + .forEach(System.out::println); + } + + public static Stream getDatesOfMonth(int monthValue) { + if (monthValue < 1 || monthValue > 12) { + return Stream.empty(); + } + + LocalDate startOfCurrentMonth = LocalDate.now() + .withMonth(monthValue) + .withDayOfMonth(1); + + return Stream.iterate(startOfCurrentMonth, d -> d.plusDays(1)) + .limit(startOfCurrentMonth.lengthOfMonth()) + .map(LocalDate::toString); } }