2015-10-21 95 views
0

我有一个嵌套的ArrayList与一些数字。获取嵌套ArrayList的频率

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

我怎样才能得到他们的频率?

有了:

System.out.println(Collections.frequency(list , 1)); 

我只得到0代替3(对我来说)。

+0

这是因为没有任何数组的内容和大小相同。如果您使用的是java 7 +,那么您想使用lambda并将其展平,然后获取频率。 – StackFlowed

+0

'Collections#frequency'的javadoc:返回指定集合中等于指定对象的元素数量。更正式地说,返回集合中的元素e的数量,使得(o == null?e == null:o.equals(e))。'。因为'list.equals(1)'在任何情况下都不会是真的,你的结果是0. – SomeJavaGuy

+0

你需要检查每个内部数组的频率,然后增加数值 – user902383

回答

1

试试这个:

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

适当的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);