Unite Colección de Colecciones en la colección en un método en Java

Nick:

He creado una clase de colección que se extiende ArrayList para agregar algunos métodos útiles. Se parece a esto:

public class Collection<T> extends ArrayList<T> {
    //some methods...
}

Quiero ser capaz de unir a una colección de colecciones para una sola colección, así:

{{1, 2}, {2,3}, {1}, {2}, {}} -> {1, 2, 2, 3, 1, 2}

Tengo una idea de cómo un método estático debe verse como:

public static<E> Collection<E> unite(Collection<Collection<E>> arr) {
    Collection<E> newCollection = new Collection<>();

    for(Collection<E> element : arr) {
        newCollection.merge(element);
    }

    return newCollection;
}

Pero no sé cómo hacer que este método no estático (para que no acepte argumentos, así:

Collection<E> list = listOfLists.unite();

). Es eso posible? Si lo es, ¿Puede por favor ayuda con ella?

ernest_k:

No tiene sentido hacerlo para cualquier tipo de hormigón T. Si Tno es de un Collectiontipo, entonces unite()es un método irrelevante (si tiene una ArrayListModified<Double>, por ejemplo, no se puede aplanar porque eso es absurdo).

Así que o bien tienen que hacer Tlimitada a las colecciones:

public class ArrayListModified<E, T extends Collection<E>> extends ArrayList<T> {

    public Collection<E> unite() {
        Collection<E> newCollection = new ArrayList<>();

        for (Collection<E> element : this) {
            newCollection.addAll(element);
        }

        return newCollection;
    }
}

O utilizar un método estático que toma un ArrayListModified<ArrayListModified<E>>parámetro al igual que en su aplicación actual (aunque no tendría que ser estática).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=215442&siteId=1
Recomendado
Clasificación