2012-04-13 13 views
6

Geçmişte ve işlenmiş para cezası Collections.frequency kullanmış ama ben bir int [] kullanıyorum artık sorun çıktı.Collections.frequency neden dönüştürülmüş listede beklenen şekilde çalışmıyor?

Temelde Collections.frequency bir dizi gerektiriyor ama benim veri yüzden listemi dönüştürmek ancak bir sonuç almıyorum bir int [] şeklindedir. Sanırım hatam listenin dönüştürülmesinde ama nasıl yapılacağından emin değil. Bunu sadece sıfır hatayla alamadım

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

ama sadece doğrudan veri eklerseniz, Arrays.asList(data) öğeleri listelemek için denediğimde garip veri almak: Burada

benim sorunun bir örnek collections<?>

herhangi bir öneriniz içine listemi dönüştürmek istiyor?

+0

bir tamsayı [] –

cevap

11

Bu çalışır:

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

O Arrays.asList senin düşündüğün ne vermemek çünkü açıklanmıştır:

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

Sen int [] bir List değil int geri alıyoruz.

+0

Çok teşekkürler Duffy kullanmayı deneyin

, ben dönüştürülen listesinde döngü için yapamadı çünkü böyle bir şey sorunu olduğunu düşünüyorum. Fakat listemi mevcut formattan buna dönüştürmek mümkün mü? çekirdek verilerim int [] biçimindedir ve girişi değiştirmek biraz zor olacaktır, bu yüzden bu testi yapmak yerine yeni bir listeye dönüştürmeye çalışıyorum. –

+0

Dönüştürme sorusu [önce] (http://stackoverflow.com/q/880581/422353) soruldu ve tek satırlık bir çözüm yok. Bunun en kolay yolu, int [] ile çalışan kendi frekans işlevinizi yuvarlamaktır. – madth3

+0

Tek başına JDK ile tek bir çözüm yok, ama Guava'nın ['Ints.asList'] (http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google /common/primitives/Ints.html#asList(int ...)) işi tek satırda yapardı. –

1

API Object bekler ve ilkel türleri nesneler değildir. Bu deneyin:

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

Ben int [] int [] Integer [] dönüştürmek için bir yolu var mı? –

+0

Her zaman int [] içinden geçebilir ve Tamsayı [] öğesinin her bir öğesini geçerli değere ayarlayabilirsiniz. –

+0

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

4

Sorunun bu talimatı Arrays.asList(data) değil.

bu yöntemin dönüş List<int[]> değildir List<Integer> olup. Burada doğru uygulanması

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); 
İlgili konular