2015-10-21 2 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 +, тогда вы хотите использовать лямбду и сгладить ее, а затем получить частоту. – StackFlowed

+0

javadoc из 'Collections # frequency':' Возвращает количество элементов в указанной коллекции, равное указанному объекту. Более формально возвращает число элементов 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); 
Смежные вопросы