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