valerielashvili

LINQuistics

Jul 22nd, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5.  
  6. public class Linquistics {
  7.     public static void main(String[] args) throws IOException {
  8.         Map<String, LinkedHashSet<String>> collections = new LinkedHashMap<>();
  9.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  10.         while (true) {
  11.             String input = reader.readLine();
  12.  
  13.             if (input.equals("exit")) {
  14.                 break;
  15.             }
  16.  
  17.             String[] tokens = input.split("\\.");
  18.             if (tokens.length > 1) {
  19.                 collections.putIfAbsent(tokens[0], new LinkedHashSet<>());
  20.  
  21.                 addElements(collections,tokens[0], Arrays.copyOfRange(tokens, 1, tokens.length));
  22.             } else if (input.equals("exit")) {
  23.                 break;
  24.             } else if (Character.isDigit(input.charAt(0))) {
  25.                 int n = Integer.parseInt("" + input.charAt(0));
  26.                 collections
  27.                         .entrySet()
  28.                         .stream()
  29.                         .sorted((a,b) -> Integer.compare(b.getValue().size(), a.getValue().size()))
  30.                         .limit(1)
  31.                         .forEach(c -> {
  32.                             c
  33.                                     .getValue()
  34.                                     .stream()
  35.                                     .sorted((a,b) -> Integer.compare(a.length(), b.length()))
  36.                                     .limit(n)
  37.                                     .forEach(m -> {
  38.                                         System.out.println("* " + m);
  39.                                     });
  40.                         });
  41.             } else {
  42.                 if (collections.containsKey(input)) {
  43.                     collections.get(input).stream().sorted((a, b) -> {
  44.                         int index = Integer.compare(b.length(), a.length());
  45.                         if (index == 0) {
  46.                             index = countUniqueCharacters(b) - countUniqueCharacters(a);
  47.                         }
  48.                        return index;
  49.                     })
  50.                     .forEach(m -> System.out.printf("* %s%n",m));
  51.                 }
  52.             }
  53.          }
  54.         String[] lastLine = reader.readLine().split("\\s+");
  55.  
  56.         String methodToSearch = lastLine[0];
  57.         String selectionToSearch = lastLine[1];
  58.  
  59.         collections
  60.                 .entrySet()
  61.                 .stream()
  62.                 .filter(a -> a.getValue().contains(methodToSearch))
  63.                 .sorted((a, b) -> {
  64.                     int index = Integer.compare(b.getValue().size(), a.getValue().size());
  65.                     if (index == 0) {
  66.                         String firstValue = b.getValue().stream().min(Comparator.comparingInt(String::length)).get();
  67.                         String secondValue = a.getValue().stream().min(Comparator.comparingInt(String::length)).get();
  68.  
  69.                         index = Integer.compare(firstValue.length(), secondValue.length());
  70.                     }
  71.  
  72.                     return index;
  73.                 })
  74.                 .forEach(c -> {
  75.                     System.out.println(c.getKey());
  76.                     if (selectionToSearch.equals("all")) {
  77.                         c.getValue().stream()
  78.                                 .sorted((m1, m2) -> {
  79.                             return Integer.compare(m2.length(), m1.length());
  80.                                 })
  81.                                 .forEach(m -> System.out.println("* " + m));
  82.                     }
  83.                 });
  84.  
  85.                 //for (String key : collections.keySet()) {
  86.                 //    System.out.println(key + " --> " + collections.get(key));
  87.                 //}
  88.  
  89.     }
  90.  
  91.     private static void addElements(Map<String, LinkedHashSet<String>> collections, String key, String[] methods) {
  92.         for (String method : methods) {
  93.             collections.get(key).add(method.replace("(", "").replace(")", ""));
  94.         }
  95.     }
  96.     public static int countUniqueCharacters(String input)
  97.     {
  98.         String unique = input.replaceAll("(.)(?=.*?\\1)", "");
  99.         return unique.length();
  100.     }
  101. }
Add Comment
Please, Sign In to add comment