multidimensionales - metodos arraylist java




Crear ArrayList desde la matriz (20)

Tengo una matriz que se inicializa como:

Element[] array = {new Element(1), new Element(2), new Element(3)};

Me gustaría convertir esta matriz en un objeto de la clase ArrayList.

ArrayList<Element> arraylist = ???;

https://code.i-harness.com


Otra solución Java8 (es posible que haya perdido la respuesta entre el gran conjunto. Si es así, mis disculpas). Esto crea una ArrayList (a diferencia de una Lista), es decir, se pueden eliminar elementos

package package org.something.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Junk {

    static <T> ArrayList<T>  arrToArrayList(T[] arr){
        return Arrays.asList(arr)
            .stream()
            .collect(Collectors.toCollection(ArrayList::new));
    }

    public static void main(String[] args) {
        String[] sArr = new String[]{"Hello", "cruel", "world"};
        List<String> ret = arrToArrayList(sArr);
        // Verify one can remove an item and print list to verify so
        ret.remove(1);
        ret.stream()
            .forEach(System.out::println);
    }
}

La salida es ...
Hola
mundo


Java 9

En Java 9 , puede utilizar el método de fábrica estático List.of para crear un literal de List . Algo como lo siguiente:

List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));

Esto devolvería una lista immutable contiene tres elementos. Si desea una lista mutable , pase esa lista al constructor ArrayList :

new ArrayList<>(List.of(// elements vararg))

JEP 269: Métodos de fábrica de conveniencia para colecciones

JEP 269 proporciona algunos métodos de fábrica de conveniencia para Java Collections API. Estos inmutables métodos de fábrica estática están integrados en las interfaces de List , Set y Map en Java 9 y posteriores.


Aunque hay muchas respuestas perfectamente escritas a esta pregunta, agregaré mis entradas.

Digamos que tienes un Element[] array = { new Element(1), new Element(2), new Element(3) };

Nueva ArrayList se puede crear de las siguientes maneras

ArrayList<Element> arraylist_1 = new ArrayList<>(Arrays.asList(array));
ArrayList<Element> arraylist_2 = new ArrayList<>(
    Arrays.asList(new Element[] { new Element(1), new Element(2), new Element(3) }));

// Add through a collection
ArrayList<Element> arraylist_3 = new ArrayList<>();
Collections.addAll(arraylist_3, array);

Y soportan muy bien todas las operaciones de ArrayList.

arraylist_1.add(new Element(4)); // or remove(): Success
arraylist_2.add(new Element(4)); // or remove(): Success
arraylist_3.add(new Element(4)); // or remove(): Success

Pero las siguientes operaciones devuelven solo una vista de Lista de un ArrayList y no un ArrayList real.

// Returns a List view of array and not actual ArrayList
List<Element> listView_1 = (List<Element>) Arrays.asList(array);
List<Element> listView_2 = Arrays.asList(array);
List<Element> listView_3 = Arrays.asList(new Element(1), new Element(2), new Element(3));

Por lo tanto, darán error cuando intenten realizar algunas operaciones ArrayList

listView_1.add(new Element(4)); // Error
listView_2.add(new Element(4)); // Error
listView_3.add(new Element(4)); // Error

Más en la lista de representación de matriz de link .


Como esta pregunta es bastante antigua, me sorprende que nadie haya sugerido la forma más simple hasta ahora:

List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

A partir de Java 5, Arrays.asList() toma un parámetro varargs y no tiene que construir la matriz explícitamente.


Dado:

Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };

Utilizar:

List<Element> listArray = Arrays.asList(array);

De acuerdo con la pregunta, la respuesta usando java 1.7 es:

ArrayList<Element> arraylist = new ArrayList<Element>(Arrays.<Element>asList(array));

Sin embargo es mejor usar siempre la interfaz:

List<Element> arraylist = Arrays.<Element>asList(array);

En Java 9 puedes usar:

List<String> list = List.of("Hello", "World", "from", "Java");
List<Integer> list = List.of(1, 2, 3, 4, 5);

La forma más sencilla de hacerlo es agregando el siguiente código. Tratado y probado.

String[] Array1={"one","two","three"};
ArrayList<String> s1= new ArrayList<String>(Arrays.asList(Array1));

Otra forma (aunque esencialmente equivalente a la new ArrayList(Arrays.asList(array)) rendimiento:

Collections.addAll(arraylist, array);

Otra forma sencilla es agregar todos los elementos de la matriz a una nueva ArrayList usando un bucle para cada uno.

ArrayList<Element> list = new ArrayList<>();

for(Element e : array)
    list.add(e);

Probablemente solo necesite una lista, no una lista de arreglos. En ese caso solo puedes hacer:

List<Element> arraylist = Arrays.asList(array);

Puede hacerlo fácilmente con la ayuda de Arrays.asList (arrayObj);

Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList<Element> arraylist =Arrays.asList(array);


Si la matriz es de un tipo primitivo, las respuestas dadas no funcionarán. Pero desde Java 8 puedes usar:

int[] array = new int[5];
Arrays.stream(array).boxed().collect(Collectors.toList());

También puedes hacerlo con stream en Java 8.

 List<Element> elements = Arrays.stream(array).collect(Collectors.toList()); 

Ya todos han proporcionado suficiente buena respuesta para su problema. Ahora de todas las sugerencias, debe decidir cuál se ajustará a sus necesidades. Hay dos tipos de colección que necesitas saber. Una es una colección no modificada y otra colección que le permitirá modificar el objeto más adelante.

Entonces, aquí daré un breve ejemplo para dos casos de uso.

  • Creación de colección inmutable: cuando no desea modificar el objeto de colección después de la creación

    List<Element> elementList = Arrays.asList(array)

  • Creación de colección mutable :: Cuando desee modificar el objeto de colección creado después de la creación.

    List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));


(hilo antiguo, pero solo 2 centavos porque ninguno menciona guava u otras libretas y algunos otros detalles)

Si puedes, usa guayaba

Vale la pena señalar la forma de la Guayaba, que simplifica enormemente estos chanchullos:

Uso

Para una lista inmutable

Use la clase copyOf() y copyOf() métodos de fábrica of() y copyOf() (los elementos no pueden ser nulos) :

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array

Para una lista mutable

Utilice la clase Lists y sus métodos de fábrica newArrayList() :

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection
List<String> l2 = Lists.newArrayList(aStringArray);               // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

Tenga en cuenta también los métodos similares para otras estructuras de datos en otras clases, por ejemplo en Sets .

¿Por qué guayaba?

El principal atractivo podría ser reducir el desorden debido a los genéricos para la seguridad de tipos, ya que el uso de los métodos de fábrica de guayaba permite inferir los tipos la mayor parte del tiempo. Sin embargo, este argumento contiene menos agua desde que Java 7 llegó con el nuevo operador de diamante.

Pero no es la única razón (y Java 7 todavía no está en todas partes): la sintaxis abreviada también es muy útil, y los métodos de inicialización, como se vio anteriormente, permiten escribir código más expresivo. Lo haces en una llamada de guava que lleva 2 con las colecciones de Java actuales.

Si no puedes ...

Para una lista inmutable

Utilice la clase Arrays de JDK y su método de fábrica asList() , envuelto con Collections.unmodifiableList() :

List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));

Tenga en cuenta que el tipo devuelto para asList() es una List usa una implementación concreta de ArrayList , pero NO es java.util.ArrayList . Es un tipo interno, que emula una ArrayList pero en realidad hace referencia directa a la matriz pasada y la hace "escritura completa" (las modificaciones se reflejan en la matriz).

Prohíbe las modificaciones a través de algunos de los métodos de la API de la List simplemente extendiendo una AbstractList (por lo tanto, no se admite la adición o eliminación de elementos), sin embargo, permite que las llamadas a set() anulen los elementos. Por lo tanto, esta lista no es realmente inmutable y una llamada a asList() debe envolverse con Collections.unmodifiableList() .

Vea el siguiente paso si necesita una lista mutable.

Para una lista mutable

Igual que el anterior, pero envuelto con un java.util.ArrayList real:

List<String> l1  = new ArrayList<String>(Arrays.asList(array));    // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array));          // Java 1.7+
List<String> l2  = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b"));       // Java 1.7+

Para fines educativos: El buen camino manual.

// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
  final List<T> l = new ArrayList<T>(array.length);

  for (final T s : array) {
    l.add(s);
  }
  return (l);
}

// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
  final List l = new ArrayList(array.length);

  for (int i = 0; i < array.length; i++) {
    l.add(array[i]);
  }
  return (l);
}

Para convertir una matriz en un ArrayList, los desarrolladores a menudo hacen esto:

List<String> list = Arrays.asList(arr);// this is wrong way..

Arrays.asList() devolverá una ArrayList que es una private static class inside Arrays , no es la clase java.util.ArrayList. The java.util.Arrays.ArrayList clase The java.util.Arrays.ArrayList tiene métodos set(), get(), contains() , pero no tiene ningún método para agregar elementos, por lo que su tamaño es fijo. Para crear un ArrayList real, debes hacer:

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

El constructor de ArrayList puede aceptar un tipo de colección , que también es un súper tipo para java.util.Arrays.ArrayList


// Guava
import com.google.common.collect.ListsLists
...
List<String> list = Lists.newArrayList(aStringArray); 

new ArrayList<>(Arrays.asList(array))




type-conversion