Java 如何在没有循环的数组中计算no?

Java 如何在没有循环的数组中计算no?,java,Java,假设我们有一个由10个元素组成的数组a[]={2,3,4,5,3,2,3,3,3,2};如果必须检查特定元素的出现次数,比如说3。那么,我如何能够在没有循环的情况下计算它呢?因为元素的数量可能太多了。我的问题是:有没有Java方法可以找到它 无需编写传统的for循环: List<Integer> list = Arrays.asList(2, 3, 4, 5, 3, 2, 3, 3, 3, 2); long occurences = list.stream().filter(n -

假设我们有一个由10个元素组成的数组a[]={2,3,4,5,3,2,3,3,3,2};如果必须检查特定元素的出现次数,比如说3。那么,我如何能够在没有循环的情况下计算它呢?因为元素的数量可能太多了。我的问题是:有没有Java方法可以找到它

无需编写传统的for循环:

List<Integer> list = Arrays.asList(2, 3, 4, 5, 3, 2, 3, 3, 3, 2);

long occurences = list.stream().filter(n -> n == 3).count();

System.out.print(occurences);

对于一个数组,它是一个对象,您必须迭代元素才能了解每个元素,循环是不可避免的

我的问题是:有没有Java方法可以找到它

是的,但你应该使用更适合你需要的结构,例如地图

其思想是使用映射来初始化值和相关的频率。这样,当您想知道整数值的频率时,就不需要再执行循环了

public Map<Integer,Integer> createWithElements(int... values) {
 Map<Integer,Integer> nbOccurencesByValue = new HashMap<>();
  for (int value : values){
    Integer actualNbOccurence = nbOccurencesByValue.get(value); 
    if (actualNbOccurence==null){
        actualNbOccurence=0;
    }
     nbOccurencesByValue.put(value, ++actualNbOccurence);
  }
 return nbOccurencesByValue;
}
如何使用它:

Map<Integer,Integer> nbOccurencesByValue = createWithElements(2, 3, 4, 5, 3, 2, 3, 3, 3, 2);
Integer nbOccurenceFor3Number = nbOccurencesByValue.get(3);

如何在不查看每个元素的情况下找到出现的次数?即使没有看到,也会始终存在循环。如果不至少触摸数组中的每个元素一次,我看不到答案。您可以使用流来避免显式循环,但在内部我认为它是循环。您可以使用递归而不是循环。@marounnaroun如果您是为了工程而这样做的,当然可以。如果这是一个家庭作业,那么这绝对是学习递归练习的一个合理的早期阶段。你认为计数是如何实现的?Nick Venderhoven没有使用循环就没有说。他一句话也没写。他是否回答了这个问题——让我们由OP来决定@MarounMaroun@OleV.V. 这在任何情况下都没有用。如果这是一个作业,OP将不会学到任何东西,如果是性能方面的东西,这里没有显著的改进。我猜你不是在要求mapToLonge->1L.sum-好吧,我的辩护,人们可能会感兴趣,谷歌搜索有没有java方法可以在没有循环的情况下计算数组中的no也许我们可以编辑该问题并将其标记为重复?@marounnaroun如果您想了解更多编程知识,这将非常有用。看到事情以多种方式进行总是好的。正如评论中所指出的,循环不是不可避免的。另一个选项是递归,如果这是递归的家庭作业,这可能正是OP所需要的,我猜这就是无循环要求的目的。循环和递归通常可以满足相同的需要。因此,是的,如果这是一个家庭作业,这可能是老师期望的,但作为一种一般方式,我不愿意在可能的情况下提出或实现自己的递归作为解决方案,因为它常常带来不必要的复杂性,使维护更加困难。