映射<对象,原子整数>到关联数组



我的输入int[]具有以下内容:

[5, 65, 22, 1, 58, 5, 69, 12, 1, 22, 22, 58, 12, 54, 89]

使用Map<Object, AtomicInteger>,我将其转换为以下对象:

{1=2, 65=1, 5=2, 69=1, 22=3, 58=2, 12=1}

换句话说,我正在计算动态数组的重复元素。

现在我需要找出最大值和最小值的发生率,我真的被进一步的步骤卡住了。

重复元素类的代码如下:

public Map<Object, AtomicInteger> countRepeatingElements(int[] inputArray) {
ConcurrentMap<Object, AtomicInteger> output = 
new ConcurrentHashMap<Object, AtomicInteger>();
for (Object i : inputArray) {
output.putIfAbsent(i, new AtomicInteger(0));
output.get(i).incrementAndGet();
}
return output;
}

如果您想找到最大值和最小值,请使用EntrySet迭代Map并比较每个键的值。

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(Map.Entry<Object, AtomicInteger> entry : output.entrySet()){
if(entry.getValue().intValue() < min){
min = entry.getValue().intValue();
}
if(entry.getValue().intValue() > max){
max = entry.getValue().intValue();
}
// entry.getValue() gives you number of times number occurs
// entry.getKey() gives you the number itself
}
int[] inputArray = {5, 65, 22, 1, 58, 5, 69, 12, 1, 22, 22, 58, 12, 54, 89};
// 1
Map<Integer, Long> grouped = Arrays.stream(inputArray)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// 2
LongSummaryStatistics stats = grouped.values()
.stream()
.mapToLong(Long::longValue)
.summaryStatistics();
System.out.println(stats.getMax());
System.out.println(stats.getMin());

最新更新