返回没有迭代的匹配列表项的计数(java)

时间:2013-06-04 13:53:19

标签: java list counting

唯一的答案是递归或以某种方式将List转换为字符串,但给出了字符串列表,例如

List<String> items = Arrays.asList("a,b,a,c,d,e,a".split("\\s*,\\s*"));

如何在不使用迭代的情况下找到任何类型List中特定值的出现次数(我假设您可以忽略库方法的工作原理),例如在上面的'a'中,它的值为3.

是的,这是一个面试问题:)

3 个答案:

答案 0 :(得分:6)

如何在不迭代集合的情况下检查每个元素?为避免显式编码迭代,可以使用Collections.frequency()

  

返回指定集合中等于指定对象的元素数。更正式地,返回集合中元素e的数量,使得(o == null?e == null:o.equals(e))。

答案 1 :(得分:2)

这将是一个递归解决方案,因为总是容易出现堆栈溢出,而不是Java中的一个很好的选择。但是,由于采访者喜欢递归,所以在这里:)

int countOccurences(List<T> l, T x) {
  return l.isEmpty()? 0 
   : (l.get(0).equals(x)? 1 : 0) + countOccurrences(l.subList(1, l.length()), x);
}

答案 2 :(得分:1)

一种方法是:

int countInCollection(List<T> list, T toFind) {
  int count = 0;
  while (list.remove(toFind)) {
    count++;
  }
  return count;
}