public static <E> E[] map(E[] a, Function<E> func){
		assert a != null;
		assert func != null;
		assert a.length > 0;
		
		E[] b = (E[]) Array.newInstance(a[0].getClass(), a.length);
		
		assert b != null;
		assert b.length != 0;
		assert b.length == a.length;
		
		for(int n = 0; n < b.length; n++){
			assert 0 <= n && n <= b.length;
			
			try{
				Class<? extends Function<E>> f = (Class<? extends Function<E>>) func.getClass();
				Constructor<?> con = f.getDeclaredConstructor(new Class[0]);
				
				Function<E> exec = (Function<E>) con.newInstance();
				
				b[n] = (E) exec.exec(a[n]);
			}
			catch(Exception e){
				//Should never need to go here unless a malformed Map was passed.
				e.printStackTrace();
			}
		}
		
		return b;
	}