只是进一步解释标题的含义:
int[] array = {1,2,1,3,2,1,4};
在上面声明的数组中, 1 出现了3次,因此数组中的最大频率也是如此。 Java是否提供任何东西可以找到答案?
答案 0 :(得分:4)
您可以为此使用新的Java 8 Streaming API:
int[] array = {1, 2, 1, 3, 2, 1, 4};
Optional<Integer> max = Arrays.stream(array) // IntStream
.boxed() // Stream<Integer>
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting())
) // Map<Integer, Long>
.entrySet() // Set<Map.Entry<Integer, Long>>
.stream() // Stream<Map.Entry<Integer, Long>>
.max(Comparator.comparing(Entry::getValue)) // Optional<Map.Entry<Integer, Long>>
.map(Map.Entry::getKey); // Optional<Integer>
我评论了每一行,在该行之后返回了当前返回的类型,以明确说明我们当前正在使用的类型。
简而言之,我们从数组创建一个Stream,然后计算每个出现的不同整数,然后选择出现次数最多的一个整数。
Optional<Integer>
之所以返回,是因为该流可以为空,但在您的情况下,该可选项将始终保留一个值。
您可以从多种可选方式中提取值:
int i = max.get()
;如果不存在任何值,则可能会引发异常int i = max.orElse(-1)
;允许您设置默认值