Advertisement
Nevoic

Java rotation

Jan 1st, 2020
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.50 KB | None | 0 0
  1. import java.lang.reflect.Array;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.function.Function;
  5. import java.util.stream.Collectors;
  6. import java.util.stream.IntStream;
  7.  
  8. public class Rotation {
  9.     private static char[] rotation(char[] items, Function<Character[], Character[]> rotate) {
  10.         var boxedItems = IntStream.range(0, items.length).mapToObj(i -> items[i]).toArray(Character[]::new);
  11.         var rotatedItems = rotate.apply(boxedItems);
  12.         var unboxedItems = new char[items.length];
  13.  
  14.         for (int i = 0; i < items.length; i++) {
  15.             unboxedItems[i] = rotatedItems[i];
  16.         }
  17.         return unboxedItems;
  18.     }
  19.  
  20.     private static short[] rotation(short[] items, Function<Short[], Short[]> rotate) {
  21.         var boxedItems = IntStream.range(0, items.length).mapToObj(i -> items[i]).toArray(Short[]::new);
  22.         var rotatedItems = rotate.apply(boxedItems);
  23.         var unboxedItems = new short[items.length];
  24.  
  25.         for (int i = 0; i < items.length; i++) {
  26.             unboxedItems[i] = rotatedItems[i];
  27.         }
  28.         return unboxedItems;
  29.     }
  30.  
  31.     private static float[] rotation(float[] items, Function<Float[], Float[]> rotate) {
  32.         var boxedItems = IntStream.range(0, items.length).mapToObj(i -> items[i]).toArray(Float[]::new);
  33.         var rotatedItems = rotate.apply(boxedItems);
  34.         var unboxedItems = new float[items.length];
  35.  
  36.         for (int i = 0; i < items.length; i++) {
  37.             unboxedItems[i] = rotatedItems[i];
  38.         }
  39.         return unboxedItems;
  40.     }
  41.  
  42.     private static boolean[] rotation(boolean[] items, Function<Boolean[], Boolean[]> rotate) {
  43.         var boxedItems = IntStream.range(0, items.length).mapToObj(i -> items[i]).toArray(Boolean[]::new);
  44.         var rotatedItems = rotate.apply(boxedItems);
  45.         var unboxedItems = new boolean[items.length];
  46.  
  47.         for (int i = 0; i < items.length; i++) {
  48.             unboxedItems[i] = rotatedItems[i];
  49.         }
  50.         return unboxedItems;
  51.     }
  52.  
  53.     private static byte[] rotation(byte[] items, Function<Byte[], Byte[]> rotate) {
  54.         var boxedItems = IntStream.range(0, items.length).mapToObj(i -> items[i]).toArray(Byte[]::new);
  55.         var rotatedItems = rotate.apply(boxedItems);
  56.         var unboxedItems = new byte[items.length];
  57.  
  58.         for (int i = 0; i < items.length; i++) {
  59.             unboxedItems[i] = rotatedItems[i];
  60.         }
  61.         return unboxedItems;
  62.     }
  63.  
  64.     private static int[] rotation(int[] items, Function<Integer[], Integer[]> rotate) {
  65.         return Arrays.stream(rotate.apply(
  66.                 Arrays.stream(items).boxed().toArray(Integer[]::new)
  67.         )).mapToInt(Integer::intValue).toArray();
  68.     }
  69.  
  70.     private static double[] rotation(double[] items, Function<Double[], Double[]> rotate) {
  71.         return Arrays.stream(rotate.apply(
  72.                 Arrays.stream(items).boxed().toArray(Double[]::new)
  73.         )).mapToDouble(Double::doubleValue).toArray();
  74.     }
  75.  
  76.     private static long[] rotation(long[] items, Function<Long[], Long[]> rotate) {
  77.         return Arrays.stream(rotate.apply(
  78.                 Arrays.stream(items).boxed().toArray(Long[]::new)
  79.         )).mapToLong(Long::longValue).toArray();
  80.     }
  81.  
  82.     public static char[] left(char[] items) {
  83.         return rotation(items, i -> Rotation.left(i, Character.class));
  84.     }
  85.  
  86.     public static short[] left(short[] items) {
  87.         return rotation(items, i -> Rotation.left(i, Short.class));
  88.     }
  89.  
  90.     public static float[] left(float[] items) {
  91.         return rotation(items, i -> Rotation.left(i, Float.class));
  92.     }
  93.  
  94.     public static boolean[] left(boolean[] items) {
  95.         return rotation(items, i -> Rotation.left(i, Boolean.class));
  96.     }
  97.  
  98.     public static byte[] left(byte[] items) {
  99.         return rotation(items, i -> Rotation.left(i, Byte.class));
  100.     }
  101.  
  102.     public static int[] left(int[] items) {
  103.         return rotation(items, i -> Rotation.left(i, Integer.class));
  104.     }
  105.  
  106.     public static double[] left(double[] items) {
  107.         return rotation(items, i -> Rotation.left(i, Double.class));
  108.     }
  109.  
  110.     public static long[] left(long[] items) {
  111.         return rotation(items, i -> Rotation.left(i, Long.class));
  112.     }
  113.  
  114.     public static char[] right(char[] items) {
  115.         return rotation(items, i -> Rotation.right(i, Character.class));
  116.     }
  117.  
  118.     public static short[] right(short[] items) {
  119.         return rotation(items, i -> Rotation.right(i, Short.class));
  120.     }
  121.  
  122.     public static float[] right(float[] items) {
  123.         return rotation(items, i -> Rotation.right(i, Float.class));
  124.     }
  125.  
  126.     public static boolean[] right(boolean[] items) {
  127.         return rotation(items, i -> Rotation.right(i, Boolean.class));
  128.     }
  129.  
  130.     public static byte[] right(byte[] items) {
  131.         return rotation(items, i -> Rotation.right(i, Byte.class));
  132.     }
  133.  
  134.     public static int[] right(int[] items) {
  135.         return rotation(items, i -> Rotation.right(i, Integer.class));
  136.     }
  137.  
  138.     public static double[] right(double[] items) {
  139.         return rotation(items, i -> Rotation.right(i, Double.class));
  140.     }
  141.  
  142.     public static long[] right(long[] items) {
  143.         return rotation(items, i -> Rotation.right(i, Long.class));
  144.     }
  145.  
  146.     public static String rotation(String items, Function<Character[], Character[]> rotate) {
  147.         final var str = "potato";
  148.  
  149.         final var _result = new StringBuilder();
  150.         Rotation.left(IntStream.range(0, str.length())
  151.                 .mapToObj(str::charAt)
  152.                 .collect(Collectors.toList())).forEach(_result::append);
  153.  
  154.         var result2 = _result.toString();
  155.         System.out.println(result2);
  156.         var result = new StringBuilder();
  157.         var boxedItems = IntStream.range(0, items.length()).mapToObj(items::charAt).toArray(Character[]::new);
  158.         for (Character c : rotate.apply(boxedItems)) {
  159.             result.append(c);
  160.         }
  161.         return result.toString();
  162.     }
  163.  
  164.     public static String left(String items) {
  165.         return rotation(items, i -> Rotation.left(i, Character.class));
  166.     }
  167.  
  168.     public static String right(String items) {
  169.         return rotation(items, i -> Rotation.right(i, Character.class));
  170.     }
  171.  
  172.     public static <T> Iterable<T> left(Iterable<T> items) {
  173.         var resultList = new ArrayList<T>();
  174.         var iterator = items.iterator();
  175.         var initial = iterator.next();
  176.  
  177.         iterator.forEachRemaining(resultList::add);
  178.         resultList.add(initial);
  179.         return resultList;
  180.     }
  181.  
  182.     public static <T> T[] left(T[] items, Class<T> klass) {
  183.         var resultArray = (T[]) Array.newInstance(klass, items.length);
  184.  
  185.         for (int i = 1; i < items.length; i++) {
  186.             resultArray[i-1] = items[i];
  187.         }
  188.         resultArray[items.length - 1] = items[0];
  189.         return resultArray;
  190.     }
  191.  
  192.     public static <T> Iterable<T> right(Iterable<T> items) {
  193.         var initialList = new ArrayList<T>();
  194.         items.forEach(initialList::add);
  195.         var last = initialList.remove(initialList.size() - 1);
  196.  
  197.         var resultList = new ArrayList<T>();
  198.         resultList.add(last);
  199.         resultList.addAll(initialList);
  200.         return resultList;
  201.     }
  202.  
  203.     public static <T> T[] right(T[] items, Class<T> klass) {
  204.         var resultArray = (T[]) Array.newInstance(klass, items.length);
  205.  
  206.         for (int i = 0; i < items.length - 1; i++) {
  207.             resultArray[i+1] = items[i];
  208.         }
  209.         resultArray[0] = items[items.length - 1];
  210.         return resultArray;
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement