Java 地图<;对象,原子整数>;到关联数组

Java 地图<;对象,原子整数>;到关联数组,java,java-8,mapping,atomic,atomicinteger,Java,Java 8,Mapping,Atomic,Atomicinteger,我为输入int[]提供了以下内容: [5, 65, 22, 1, 58, 5, 69, 12, 1, 22, 22, 58, 12, 54, 89] 使用Map,我将其转换为以下对象: {1=2, 65=1, 5=2, 69=1, 22=3, 58=2, 12=1} 换句话说,我在计算动态数组的重复元素 现在我需要找出最大和最小发生率,我真的被进一步的步骤卡住了 重复元素类的代码如下: public Map<Object, AtomicInteger> countRepeatin

我为输入
int[]
提供了以下内容:

[5, 65, 22, 1, 58, 5, 69, 12, 1, 22, 22, 58, 12, 54, 89]
使用
Map
,我将其转换为以下对象:

{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;
}
publicmap countRepeatingElements(int[]输入阵列){
ConcurrentMap输出=
新的ConcurrentHashMap();
用于(对象i:输入阵列){
输出putIfAbsent(i,新的原子整数(0));
get(i).incrementAndGet();
}
返回输出;
}

如果要查找最大值和最小值,请使用EntrySet遍历映射并比较每个键的值

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 min=Integer.MAX\u值;
int max=整数的最小值;
for(Map.Entry:output.entrySet()){
if(entry.getValue().intValue()max){
max=entry.getValue().intValue();
}
//getValue()提供数字出现的次数
//getKey()提供数字本身
}
int[]inputArray={5,65,22,1,58,5,69,12,1,22,22,58,12,54,89};
// 1
Map group=Arrays.stream(inputArray)
.boxed()
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());
// 2
LongSummaryStatistics=grouped.values()
.stream()
.mapToLong(Long::longValue)
.summaryStatistics();
System.out.println(stats.getMax());
System.out.println(stats.getMin());

两条注释:1。我很好奇为什么
Map
而不是
Map
2。除非同时使用此方法的结果,否则您仍然可以使用
HashMap
(您可以使用
output.compute
添加/增量)min=entry.getValue();引发警告,该警告应为AtomicInteger类型更新的代码,应为getValue().intValue(),因为您正在将AtomicInteger转换为int。或者,您可以将最小和最大变量设置为AtomicInteger,并相应地更改实现。
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());