deyanmalinov

5. Filter by Age

Apr 14th, 2020
177
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.function.Consumer;
  5. import java.util.function.Predicate;
  6.  
  7. public class Main {
  8.     public static void main(String[] args) {
  9.         Scanner scan = new Scanner(System.in);
  10.         int num = Integer.parseInt(scan.nextLine());
  11.         LinkedHashMap<String, Integer> people=new LinkedHashMap<>();
  12.         for (int i = 0; i < num; i++) {
  13.             String[] input =scan.nextLine().split(", ");
  14.             people.put(input[0], Integer.parseInt(input[1]));
  15.         }
  16.        String condition = scan.nextLine();
  17.         int age = Integer.parseInt(scan.nextLine());
  18.         String format = scan.nextLine();
  19.         Predicate<Integer> tester = createTester(condition, age);
  20.         Consumer<Map.Entry<String, Integer>> printer =
  21.                 createPrinter(format);
  22.         printFilteredStudent(people, tester, printer);
  23.     }
  24.     static Consumer<Map.Entry<String, Integer>> createPrinter(String format) {
  25.         Consumer<Map.Entry<String, Integer>> printer = null;
  26.         switch (format) {
  27.             case "name age":
  28.                 printer = person -> System.out.printf("%s - %d%n",
  29.                         person.getKey(), person.getValue());
  30.                 break;
  31.             case "age":
  32.                 printer = person -> System.out.printf("%d%n", person.getValue());
  33.             case "name":
  34.                 printer = person -> System.out.printf("%s%n", person.getKey());
  35.         }
  36.         return printer;
  37.     }
  38.     static Predicate<Integer> createTester(String condition, Integer age) {
  39.         Predicate<Integer> tester = null;
  40.         switch (condition) {
  41.             case "younger":
  42.                 tester = x -> x <= age;
  43.                 break;
  44.             case "older":
  45.                 return  x-> x >=  age;
  46.             default:
  47.                 return null;
  48.         }
  49.         return tester;
  50.     }
  51.     static void printFilteredStudent(
  52.             LinkedHashMap<String, Integer> people,
  53.             Predicate<Integer> tester,
  54.             Consumer<Map.Entry<String, Integer>> printer) {
  55.         for (Map.Entry<String, Integer> person : people.entrySet()) {
  56.             if (tester.test(people.get(person.getKey())))
  57.                 printer.accept(person);
  58.         }
  59.     }
  60. }
RAW Paste Data