2012-04-13 11 views
6

Ich habe Collections.frequency in der Vergangenheit verwendet und es hat gut funktioniert, aber ich habe jetzt Probleme, dass ich ein int [] verwende.Warum funktioniert Collections.frequency nicht wie erwartet auf der konvertierten Liste?

Grundsätzlich Collections.frequency erfordert ein Array, aber meine Daten sind in der Form eines int [] so konvertiere ich meine Liste, aber bekomme keine Ergebnisse. Ich denke, mein Fehler ist in der Konvertierung der Liste, aber nicht sicher, wie es geht.

Hier ist ein Beispiel für mein Problem:

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 
    } 
} 

Ich habe keinen Fehler nur Null bekommen, aber ich seltsame Daten erhalten, wenn ich versuche, die Elemente in Arrays.asList(data) zur Liste, wenn ich direkt nur Daten hinzufügen, es will meine Liste in collections<?> konvertieren

Irgendwelche Vorschläge?

+0

Versuchen Sie, einen Integer [] –

Antwort

11

Dies funktioniert:

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 ist, weil Arrays.asList nicht, dir gibt, was Sie denken, es ist:

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

Sie bekommen ein List von int [], nicht int zurück.

+0

Vielen Dank Duffy mit, dachte ich so etwas wie dies das Problem war, weil ich nicht ein for-Schleife auf der konvertierten Liste tun könnte. Aber ist es möglich, meine Liste aus dem bestehenden Format zu konvertieren? Meine Kerndaten sind in int [] und es wird etwas schwierig sein, die Eingabe zu ändern, also habe ich versucht, sie in eine neue Liste umzuwandeln, anstatt diesen Test zu machen. –

+0

Die Konvertierungsfrage wurde [vorher] gestellt (http://stackoverflow.com/q/880581/422353) und es gibt keine einzeilige Lösung. Ich denke, der einfachste Weg ist eine eigene Frequenzfunktion, die mit 'int []' arbeitet. – madth3

+0

Es gibt keine Ein-Zeilen-Lösung mit dem JDK allein, sondern Guava's ['Ints.asList'] (http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google /common/primitives/Ints.html#asList(int ...)) würde die Aufgabe in einer Zeile erledigen. –

1

Die API erwartet eine Object, und primitive Typen sind keine Objekte. Versuchen Sie folgendes:

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

Ich bekomme es in int [] gibt es eine Möglichkeit, ein int [] in Integer [] zu konvertieren? –

+0

Sie können immer durch Ihr int [] gehen und jedes Element von Integer [] auf den aktuellen Wert setzen. –

+0

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

4

Sie Problem aus dieser Anweisung ist Arrays.asList(data).

Die Rückgabe dieser Methode ist List<int[]> nicht List<Integer>.

hier eine korrekte Implementierung

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); 
Verwandte Themen