2012-10-12 54 views
44

estoy tratando de pasar una matriz de cadenas como argumento al constructor de la clase de humedales; No entiendo cómo agregar los elementos de la matriz de cadenas a la lista de matriz de cadenas.¿Cómo agregar elementos de una matriz de cadenas a una lista de matriz de cadenas?

import java.util.ArrayList; 

public class Wetland { 
    private String name; 
    private ArrayList<String> species; 
    public Wetland(String name, String[] speciesArr) { 
     this.name = name; 
     for (int i = 0; i < speciesArr.length; i++) { 
      species.add(speciesArr[i]); 
     } 
    } 
} 

Respuesta

83

Usted ya ha incorporado en el método para ello: -

List<String> species = Arrays.asList(speciesArr); 

NOTA: - Se debe utilizar List<String> species no ArrayList<String> species.

Arrays.asList devuelve uno diferente ArrayList ->java.util.Arrays.ArrayList que no se puede escribir a java.util.ArrayList.

Entonces se tendría que utilizar addAll método, que no es tan bueno. Así que sólo tiene que utilizar List<String>

NOTA: - La lista devuelta por Arrays.asList es una lista de tamaño fijo. Si desea agregar algo a la lista, deberá crear otra lista y usar addAll para agregarle elementos. Así, entonces es mejor que iría con la segunda forma de la siguiente manera: -

String[] arr = new String[1]; 
    arr[0] = "rohit"; 
    List<String> newList = Arrays.asList(arr); 

    // Will throw `UnsupportedOperationException 
    // newList.add("jain"); // Can't do this. 

    ArrayList<String> updatableList = new ArrayList<String>(); 

    updatableList.addAll(newList); 

    updatableList.add("jain"); // OK this is fine. 

    System.out.println(newList);  // Prints [rohit] 
    System.out.println(updatableList); //Prints [rohit, jain] 
+2

@rorrohprog .. No devuelve Object, sino una lista , donde T es el tipo de matriz que pasa. Consulte http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList (T ...) –

+1

@rorrohprog. Creo que deberías probar este código. Y vea los documentos que di el enlace .. –

+0

@rorrohprog. Ahora creo que mi publicación es mucho más clara. –

5

Arrays.asList es puente entre la matriz y el marco de recogida y se devuelve una lista de tamaño fijo respaldado por la matriz.

species = Arrays.asList(speciesArr); 
+1

Arrays.asList devuelve un objeto! –

+1

Devuelve 'Lista ' –

+1

@rorrohprog Si lee los documentos http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList%28T...%29 dice que devuelve 'List ' – luketorjussen

0

Uso asList() método. De Java Doc asList

List<String> species = Arrays.asList(speciesArr); 
+0

Arrays.asList devuelve un objeto! duh –

+0

@rorrohprog echa un vistazo http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList (T ...) –

+0

Sí, ya lo hice. –

7

Debe instancia su ArrayList antes de intentar agregar elementos:

private List<String> species = new ArrayList<String>(); 
+0

Eso no es realmente lo que la pregunta está haciendo. – luketorjussen

+1

Ok, pero es lo principal que salió mal. –

1

Arrays.asList es la función útil disponible en Java para convertir una variable de matriz a la lista o colección. Para mejor bajo pie considerar el siguiente ejemplo:

package com.stackoverflow.works; 

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

public class Wetland { 
    private String name; 
    private List<String> species = new ArrayList<String>(); 

    public Wetland(String name, String[] speciesArr) { 
     this.name = name; 
     this.species = Arrays.asList(speciesArr); 
    } 

    public void display() { 
     System.out.println("Name: " + name); 
     System.out.println("Elements in the List"); 
     System.out.println("********************"); 
     for (String string : species) { 
      System.out.println(string); 
     } 
    } 

    /* 
    * @Description: Method to test your code 
    */ 
    public static void main(String[] args) { 
     String name = "Colors"; 
     String speciesArr[] = new String [] {"red", "blue", "green"}; 
     Wetland wetland = new Wetland(name, speciesArr); 
     wetland.display(); 
    } 

} 

Salida: Método

enter image description here

13

prefiero esto,

List<String> temp = Arrays.asList(speciesArr); 
species.addAll(temp); 

La razón es Arrays.asList() lo hará crea una lista de tamaño fijo. Así que si almacena directamente en las especies entonces usted no será capaz de añadir ningún elemento más, todavía no es de sólo lectura. Seguramente puede editar sus artículos. Así que tómalo en la lista temporal.

alternativa para esto es,

Collections.addAll(species, speciesArr); 

En este caso, se puede añadir, editar, eliminar sus artículos.

Pensamiento
1
ArrayList<String> arraylist= new ArrayList<String>(); 

arraylist.addAll(Arrays.asList("mp3 radio", "presvlake", "dizalica", "sijelice", "brisaci farova", "neonke", "ratkape", "kuka", "trokut")); 
+0

Su funcionamiento .... –

7

Voy a añadir ésta a la mezcla:

Collections.addAll(result, preprocessor.preprocess(lines)); 

Este es el cambio que Intelli recomienda.

de los javadocs:

Adds all of the specified elements to the specified collection. 
 
Elements to be added may be specified individually or as an array. 
 
The behavior of this convenience method is identical to that of 
 
<tt>c.addAll(Arrays.asList(elements))</tt>, but this method is likely 
 
to run significantly faster under most implementations. 
 
    
 
When elements are specified individually, this method provides a 
 
convenient way to add a few elements to an existing collection: 
 
<pre> 
 
Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon"); 
 
</pre>

2

En Java 8, la sintaxis para esto simplifica en gran medida y se puede utilizar para llevar a cabo esta transformación de manera sucinta.

Tenga en cuenta que tendrá que cambiar su campo de una implementación concreta a la interfaz List para que esto funcione sin problemas. método

public class Wetland { 
    private String name; 
    private List<String> species; 
    public Wetland(String name, String[] speciesArr) { 
     this.name = name; 
     species = Arrays.stream(speciesArr) 
         .collect(Collectors.toList()); 
    } 
} 
-1
public class duplicateArrayList { 


    ArrayList al = new ArrayList(); 
    public duplicateArrayList(Object[] obj) { 

     for (int i = 0; i < obj.length; i++) { 

      al.add(obj[i]); 
     } 

     Iterator iter = al.iterator(); 
     while(iter.hasNext()){ 

      System.out.print(" "+iter.next()); 
     } 
    } 

    public static void main(String[] args) { 


    String[] str = {"A","B","C","D"}; 

    duplicateArrayList dd = new duplicateArrayList(str); 

    } 

} 
0

Arrays.asList() simplemente devuelve List tipo

char [] arr = { 'c','a','t'};  
ArrayList<Character> chars = new ArrayList<Character>(); 

Para añadir la matriz en la lista, primero convertirlo a enumerar y luego llamar addAll

List arrList = Arrays.asList(arr); 
chars.addAll(arrList); 

La línea siguiente causará el error del compilador

chars.addAll(Arrays.asList(arr)); 
Cuestiones relacionadas