我试图弄清楚如何获取列表中项目的频率。过去,当我处理这个问题时,我通常会:
int occurrences = Collections.frequency(list, 0);
当我的列表是List<Integer> list
. 如果我正在使用,有没有办法做到这一点int[] list
?当我尝试收集时,我的列表会被转换,然后我的代码会中断。如果需要,我可以转换我的代码,但想知道是否有办法从 int[] 获取频率。
我试图弄清楚如何获取列表中项目的频率。过去,当我处理这个问题时,我通常会:
int occurrences = Collections.frequency(list, 0);
当我的列表是List<Integer> list
. 如果我正在使用,有没有办法做到这一点int[] list
?当我尝试收集时,我的列表会被转换,然后我的代码会中断。如果需要,我可以转换我的代码,但想知道是否有办法从 int[] 获取频率。
您可以 (1) 编写自己的线性时间frequency
方法,或 (2) 转换为盒装 int 类型的数组并使用Arrays.asList
with Collections.frequency
。
int[] arr = {1, 2, 3};
Integer[] boxedArr = new Integer[arr.length];
for(int i = 0; i < arr.length; i++)
boxedArr[i] = arr[i];
System.out.println(Collections.frequency(Arrays.asList(boxedArr), 1));
List
您可以从 中创建一个int[]
,但除此之外,您只需要编写自己的。
int[] l = //your data;
List<Integer> list = new List<Integer>();
for(int i : l)
list.add(i);
int o = Collections.frequency(list, 0);
或者Arrays.asList(l);
让它更短。
int occurrences = Collections.frequency(Arrays.asList(list), 0);
或者,如果您反对将其转换为列表:
int occurrences = 0;
for (int i = 0; i < list.length; i++)
{
if(list[i] == X) // X being your number to check
occurrences++;
}
你也可以这样做。
List<Integer> intList = Arrays.asList(new Integer [] {
2, 3, 4, 5, 6,
2, 3, 4, 5,
2, 3, 4,
2, 3,
2
});
System.out.println(" count " + Collections.frequency(intList, 6));