Advertisement
Nevoic

Java rotation

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