Advertisement
Didart

Filter by Age

Jan 30th, 2023
610
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.36 KB | None | 0 0
  1. package FunctionalProgramming;
  2.  
  3. import java.io.IOException;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6. import java.util.Scanner;
  7. import java.util.function.*;
  8.  
  9.  
  10. public class FilterByAge {
  11.     public static void main(String[] args) throws IOException {
  12.         Scanner scan = new Scanner(System.in);
  13.  
  14.         int num = Integer.parseInt(scan.nextLine());
  15.         LinkedHashMap<String, Integer> people = new LinkedHashMap<>();
  16.  
  17.         for (int i = 0; i < num; i++) {
  18.             String[] input = scan.nextLine().split(", ");
  19.             people.put(input[0], Integer.parseInt(input[1]));
  20.         }
  21.         String condition = scan.nextLine();
  22.         int age = Integer.parseInt(scan.nextLine());
  23.         String format = scan.nextLine();
  24.  
  25.         Predicate<Integer> tester = createTester(condition, age);
  26.         Consumer<Map.Entry<String, Integer>> printer =
  27.                 createPrinter(format);
  28.         printFilteredStudent(people, tester, printer);
  29.     }
  30.  
  31.     static Consumer<Map.Entry<String, Integer>> createPrinter(String format) {
  32.         Consumer<Map.Entry<String, Integer>> printer = null;
  33.  
  34.         switch (format) {
  35.             case "name age":
  36.                 printer = person -> System.out.printf("%s - %d%n",
  37.                         person.getKey(), person.getValue());
  38.                 break;
  39.             case "age":
  40.                 printer = person -> System.out.printf("%d%n", person.getValue());
  41.             case "name":
  42.                 printer = person -> System.out.printf("%s%n", person.getKey());
  43.         }
  44.         return printer;
  45.     }
  46.  
  47.     static Predicate<Integer> createTester(String condition, Integer age) {
  48.         Predicate<Integer> tester = null;
  49.  
  50.         switch (condition) {
  51.             case "younger":
  52.                 tester = x -> x <= age;
  53.                 break;
  54.             case "older":
  55.                 return x -> x >= age;
  56.             default:
  57.                 return null;
  58.         }
  59.         return tester;
  60.     }
  61.  
  62.     static void printFilteredStudent(
  63.             LinkedHashMap<String, Integer> people,
  64.             Predicate<Integer> tester,
  65.             Consumer<Map.Entry<String, Integer>> printer) {
  66.        
  67.         for (Map.Entry<String, Integer> person : people.entrySet()) {
  68.             if (tester.test(people.get(person.getKey())))
  69.                 printer.accept(person);
  70.         }
  71.     }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement