唯一的答案是递归或以某种方式将List转换为字符串,但给出了字符串列表,例如
List<String> items = Arrays.asList("a,b,a,c,d,e,a".split("\\s*,\\s*"));
如何在不使用迭代的情况下找到任何类型List中特定值的出现次数(我假设您可以忽略库方法的工作原理),例如在上面的'a'中,它的值为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;
}