2012-04-13 19 views
6

He utilizado Collections.frequency en el pasado y funcionó bien, pero ahora estoy teniendo problemas con el int [].¿Por qué Collections.frequency no funciona como se espera en la lista convertida?

Básicamente Collections.frequency requiere una matriz, pero mis datos tienen forma de int [], por lo que convierto mi lista pero no obtengo ningún resultado. Creo que mi error está en la conversión de la lista, pero no estoy seguro de cómo hacerlo.

He aquí un ejemplo de mi problema:

import java.util.Arrays; 
import java.util.Collection; 
import java.util.Collections; 

public class stackexample { 
    public static void main(String[] args) { 
     int[] data = new int[] { 5,0, 0, 1}; 
     int occurrences = Collections.frequency(Arrays.asList(data), 0); 
     System.out.println("occurrences of zero is " + occurrences); //shows 0 but answer should be 2 
    } 
} 

no consigo un error simplemente cero, pero puedo recuperar los datos raro cuando intento para enumerar los elementos de Arrays.asList(data), si acabo de agregar datos directamente, quiere convertir mi lista en collections<?>

¿Alguna sugerencia?

+0

Trate de usar un Integer [] –

Respuesta

11

Esto funciona:

import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class stackexample { 
    public static void main(String[] args) { 
     List<Integer> values = Arrays.asList(5, 0, 0, 2); 
     int occurrences = Collections.frequency(values, 0); 
     System.out.println("occurrences of zero is " + occurrences); //shows 0 but answer should be 2 
    } 
} 

Es porque Arrays.asList no le está dando lo que creo que es:

http://mlangc.wordpress.com/2010/05/01/be-carefull-when-converting-java-arrays-to-lists/

Estás recibir como respuesta un List de int [], no int.

+0

Gracias tanto Duffy, pensé que algo como esto era el problema porque no podía hacer un bucle en la lista convertido. ¿Pero es posible convertir mi lista del formato existente a esto? mis datos centrales están en int [] y será un poco difícil cambiar la entrada, así que intenté convertirla en una nueva lista para hacer esta prueba. –

+0

La pregunta de conversión se ha realizado [antes] (http://stackoverflow.com/q/880581/422353) y no hay una solución de una línea. Creo que la forma más fácil de hacerlo es rodar tu propia función de frecuencia que funciona con 'int []'. – madth3

+0

No existe una solución de una sola línea con el JDK solo, pero la de Guava ['Ints.asList'] (http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google /common/primitives/Ints.html#asList(int ...)) haría el trabajo en una línea. –

1

La API espera un Object, y los tipos primitivos no son objetos. Pruebe esto:

import java.util.Arrays; 
import java.util.Collection; 
import java.util.Collections; 

public class stackexample { 
    public static void main(String[] args) { 
     Integer[] data = new Integer[] { 5,0, 0, 1}; 
     int occurrences = Collections.frequency(Arrays.asList(data), Integer.valueOf(5)); 
     System.out.println("occurrences of five is " + occurrences); 
    } 
} 
+0

Lo estoy obteniendo en int [] ¿hay alguna forma de convertir un int [] en un entero []? –

+0

Siempre puede recorrer su int [] y establecer cada elemento del entero [] en el valor actual. –

+0

http://stackoverflow.com/questions/880581/how-to-convert-int-to-integer-in-java –

4

Su problema es de esta instrucción Arrays.asList(data).

el regreso de este método es List<int[]> no List<Integer>.

aquí una implementación correcta

int[] data = new int[] { 5,0, 0, 1}; 
    List<Integer> intList = new ArrayList<Integer>(); 
    for (int index = 0; index < data.length; index++) 
    { 
     intList.add(data[index]); 
    } 

    int occurrences = Collections.frequency(intList, 0); 
    System.out.println("occurrences of zero is " + occurrences); 
Cuestiones relacionadas