package de.axone.tools; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; public class A { // Boolean public static boolean[] arrayBool( Collection<Boolean> values ){ if( values == null || values.size() == 0 ) return new boolean[0]; boolean [] result = new boolean[ values.size() ]; int i=0; for( Boolean b : values ){ result[i++] = b; } return result; } public static boolean[] array( boolean ... values ){ return values; } public static Boolean[] objects( boolean ... values ){ Boolean [] result = new Boolean[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Boolean> list( boolean ... values ){ return Arrays.asList( objects( values ) ); } public static Set<Boolean> set( boolean ... values ){ return new HashSet<Boolean>( list( values ) ); } // Byte public static byte[] array( byte ... values ){ return values; } public static Byte[] objects( byte ... values ){ Byte [] result = new Byte[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Byte> list( byte ... values ){ return Arrays.asList( objects( values ) ); } public static Set<Byte> set( byte ... values ){ return new HashSet<Byte>( list( values ) ); } // Character public static char[] array( char ... values ){ return values; } public static Character[] objects( char ... values ){ Character [] result = new Character[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Character> list( char ... ints ){ return Arrays.asList( objects( ints ) ); } public static Set<Character> set( char ... values ){ return new HashSet<Character>( list( values ) ); } // Short public static short[] array( short ... values ){ return values; } public static Short[] objects( short ... values ){ Short [] result = new Short[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Short> list( short ... ints ){ return Arrays.asList( objects( ints ) ); } public static Set<Short> set( short ... values ){ return new HashSet<Short>( list( values ) ); } // Integer public static int[] arrayInt( Collection<Integer> values ){ if( values == null || values.size() == 0 ) return new int[0]; int [] result = new int[ values.size() ]; int i=0; for( Integer b : values ){ result[i++] = b; } return result; } public static int[] array( int ... values ){ return values; } public static Integer[] objects( int ... values ){ Integer [] result = new Integer[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Integer> list( int ... ints ){ return Arrays.asList( objects( ints ) ); } public static Set<Integer> set( int ... values ){ return new HashSet<Integer>( list( values ) ); } // Long public static long[] array( long ... values ){ return values; } public static Long[] objects( long ... values ){ Long [] result = new Long[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Long> list( long ... values ){ return Arrays.asList( objects( values ) ); } public static Set<Long> set( long ... values ){ return new HashSet<Long>( list( values ) ); } // Float public static float[] array( float ... values ){ return values; } public static Float[] objects( float ... values ){ Float [] result = new Float[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Float> list( float ... values ){ return Arrays.asList( objects( values ) ); } public static Set<Float> set( float ... values ){ return new HashSet<Float>( list( values ) ); } // Double public static double[] array( double ... values ){ return values; } public static Double[] objects( double ... values ){ Double [] result = new Double[ values.length ]; for( int i=0; i<values.length; i++ ) result[ i ] = values[ i ]; return result; } public static List<Double> list( double ... values ){ return Arrays.asList( objects( values ) ); } public static Set<Double> set( double ... values ){ return new HashSet<Double>( list( values ) ); } // Generic @SafeVarargs public static <X> X[] Array( X ... values ){ return values; } // This is a common case. Make it more comfortable and quicker. public static String [] Array( Collection<String> values ){ return values.toArray( new String[ values.size() ] ); } public static <X> X[] Array( Collection<X> values, Class<X> clazz ){ if( values == null || values.size() == 0 ) throw new IllegalArgumentException( "values is null or empty" ); @SuppressWarnings( "unchecked" ) //X[] result = (X[])Array.newInstance( values.iterator().next().getClass(), values.size() ); X[] result = (X[])Array.newInstance( clazz, values.size() ); return values.toArray( result ); } public static <X> X[][] Array2D( Class<X> xClass, Collection<? extends Collection<X>> values ){ @SuppressWarnings( "unchecked" ) X[][] result = (X[][])Array.newInstance( xClass , values.size(), 0 ); int i=0; for( Collection<X> row : values ){ @SuppressWarnings( "unchecked" ) X[] rowAsArray = (X[])Array.newInstance( xClass, row.size() ); result[i] = row.toArray( rowAsArray ); i++; } return result; } public static <X> List<List<X>> List2D( X[][] values ){ List<List<X>> result = new ArrayList<>( values.length ); for( X [] row : values ){ result.add( Arrays.asList( row ) ); } return result; } @SafeVarargs public static <X> List<X> List( X ... values ){ return Arrays.asList( values ); } @SafeVarargs public static <X> Set<X> set( X ... values ){ return new HashSet<X>( List( values ) ); } // Object public static Object[] objectArray( Object ... values ){ return values; } public static List<Object> objectList( Object ... values ){ return Arrays.asList( values ); } public static Set<Object> objectSet( Object ... values ){ return new HashSet<Object>( objectList( values ) ); } public static char [] union( char [] a, char ... b ){ char [] result = new char[ a.length + b.length ]; System.arraycopy( a, 0, result, 0, a.length ); System.arraycopy( b, 0, result, a.length, b.length ); return result; } public static String [] union( String [] a, String ... b ){ String [] result = new String[ a.length + b.length ]; System.arraycopy( a, 0, result, 0, a.length ); System.arraycopy( b, 0, result, a.length, b.length ); return result; } }