为什么Collections.frequency在转换列表中没有按预期工作?

时间:2012-04-13 00:08:43

标签: java

我过去使用过Collections.frequency并且工作正常,但我现在遇到问题,因为我正在使用int []。

基本上Collections.frequency需要一个数组,但我的数据是int []的形式,所以我转换我的列表,但没有得到结果。我认为我的错误在于转换列表,但不知道该怎么做。

以下是我的问题的一个例子:

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

我没有收到错误,但是当我尝试列出Arrays.asList(data)中的项目时,我得到了奇怪的数据,如果我只是直接添加数据,它想将我的列表转换为collections<?>

有什么建议吗?

3 个答案:

答案 0 :(得分:12)

这有效:

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

这是因为Arrays.asList没有给你你的想法:

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

您将获得List int []而不是int

答案 1 :(得分:4)

你的问题来自这条指令Arrays.asList(data)

此方法的返回为List<int[]>而不是List<Integer>

这是一个正确的实现

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

答案 2 :(得分:1)

API需要Object,而基本类型不是对象。试试这个:

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