Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取嵌套ArrayList的频率_Java_List_Arraylist_Collections - Fatal编程技术网

Java 获取嵌套ArrayList的频率

Java 获取嵌套ArrayList的频率,java,list,arraylist,collections,Java,List,Arraylist,Collections,我有一个带有一些数字的嵌套数组列表 ArrayList<Integer[]> list = new ArrayList<Integer[]>(); list.add(new Integer[] { 1, 2, 3, 4 }); list.add(new Integer[] { 1, 2, 4 }); list.add(new Integer[] { 1, 2 }); 我只得到0,而不是3(在我的情况下)。试试这个: int count = 0; for (Integer

我有一个带有一些数字的嵌套数组列表

ArrayList<Integer[]> list = new ArrayList<Integer[]>();
list.add(new Integer[] { 1, 2, 3, 4 });
list.add(new Integer[] { 1, 2, 4 });
list.add(new Integer[] { 1, 2 });
我只得到
0
,而不是
3
(在我的情况下)。

试试这个:

int count = 0;
for (Integer[] i: list) {
    count += Collections.frequency(Arrays.asList(i), 1);
}
System.out.println(count);   //3

合适的java 8解决方案如下所示:

System.out.println(list.stream().mapToInt(arr -> Collections.frequency(Arrays.asList(arr), 1)).sum());
如果您仍然使用java 6/7,则需要执行以下操作:

int sum= 0;
for (Integer[] arr: list) {
    sum+=Collections.frequency(Arrays.asList(arr), 1);
}
System.out.println(sum);

这是因为没有一个数组具有相同的内容和大小。如果您使用的是java 7+,则需要使用lambda并将其展平,然后获取频率。
集合的javadoc#frequency
返回指定集合中与指定对象相等的元素数。更正式地说,返回集合中元素e的数量,以便(o==null?e==null:o.equals(e))。
。由于
list.equals(1)
在任何情况下都不会为真,因此您的结果为0。您需要检查每个内部数组中的频率,然后向上添加值。如果您的数组总是排序的,您可以使用Java 8流并按toString分组。
int sum= 0;
for (Integer[] arr: list) {
    sum+=Collections.frequency(Arrays.asList(arr), 1);
}
System.out.println(sum);