Advertisement
Nevoic

Java rotation

Jan 1st, 2020
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.17 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.         var result = new StringBuilder();
  148.         var boxedItems = IntStream.range(0, items.length()).mapToObj(items::charAt).toArray(Character[]::new);
  149.         for (Character c : rotate.apply(boxedItems)) {
  150.             result.append(c);
  151.         }
  152.         return result.toString();
  153.     }
  154.  
  155.     public static String left(String items) {
  156.         return rotation(items, i -> Rotation.left(i, Character.class));
  157.     }
  158.  
  159.     public static String right(String items) {
  160.         return rotation(items, i -> Rotation.right(i, Character.class));
  161.     }
  162.  
  163.     public static <T> Iterable<T> left(Iterable<T> items) {
  164.         var resultList = new ArrayList<T>();
  165.         var iterator = items.iterator();
  166.         var initial = iterator.next();
  167.  
  168.         iterator.forEachRemaining(resultList::add);
  169.         resultList.add(initial);
  170.         return resultList;
  171.     }
  172.  
  173.     public static <T> T[] left(T[] items, Class<T> klass) {
  174.         var resultArray = (T[]) Array.newInstance(klass, items.length);
  175.  
  176.         for (int i = 1; i < items.length; i++) {
  177.             resultArray[i-1] = items[i];
  178.         }
  179.         resultArray[items.length - 1] = items[0];
  180.         return resultArray;
  181.     }
  182.  
  183.     public static <T> Iterable<T> right(Iterable<T> items) {
  184.         var initialList = new ArrayList<T>();
  185.         items.forEach(initialList::add);
  186.         var last = initialList.remove(initialList.size() - 1);
  187.  
  188.         var resultList = new ArrayList<T>();
  189.         resultList.add(last);
  190.         resultList.addAll(initialList);
  191.         return resultList;
  192.     }
  193.  
  194.     public static <T> T[] right(T[] items, Class<T> klass) {
  195.         var resultArray = (T[]) Array.newInstance(klass, items.length);
  196.  
  197.         for (int i = 0; i < items.length - 1; i++) {
  198.             resultArray[i+1] = items[i];
  199.         }
  200.         resultArray[0] = items[items.length - 1];
  201.         return resultArray;
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement