Convert a generic list to an array

前端 未结 13 1277
隐瞒了意图╮
隐瞒了意图╮ 2020-12-05 17:13

I have searched for this, but unfortunately, I don\'t get the correct answer.

class Helper {
    public static  T[] toArray(List list) {
           


        
13条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-05 17:54

    Worked solution!

    Just copy interface and class inside your project. This :

    public interface LayerDataTransformer {
        T transform(F from);
    
        Collection transform(Collection from);
    
        T[] toArray(Collection from);
    }
    

    and this :

    public abstract class BaseDataLayerTransformer implements LayerDataTransformer {
    
        @Override
        public List transform(Collection from) {
            List transformed = new ArrayList<>(from.size());
    
            for (F fromObject : from) {
                transformed.add(transform(fromObject));
            }
    
            return transformed;
        }
    
        @Override
        public T[] toArray(Collection from) {
            Class clazz = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
            T[] transformedArray = (T[]) java.lang.reflect.Array.newInstance(clazz, from.size());
    
            int index = 0;
            for (F fromObject : from) {
                transformedArray[index] = transform(fromObject);
                index++;
            }
    
            return transformedArray;
        }
    }
    

    Usage.

    Declare a subclass of BaseDataLayerTransformer

    public class FileToStringTransformer extends BaseDataLayerTransformer {
        @Override
        public String transform(File file) {
            return file.getAbsolutePath();
        }
    }
    

    And use :

    FileToStringTransformer transformer = new FileToStringTransformer();
    List files = getFilesStub();// returns List
    //profit!
    String[] filePathArray = transformer.toArray(files);
    

提交回复
热议问题