简体   繁体   English

如何创建频率表(整数数组)

[英]how to create frequency table (array of integers)

I made an int[] array that will be fill by score from users input. 我创建了一个int []数组,它将通过用户输入的分数填充。 My task is to create a frequency table, which count how many times did a certain score entered by the user. 我的任务是创建一个频率表,该表计算用户输入某个分数的次数。 Example: user entered the following score, 13,13,13,16,16,19,22. 示例:用户输入以下分数,13,13,13,16,16,19,22。 Then, in a tabular form 13 - 3 ,16 - 2, 19 - 1, 22 - 1. Sorry bad english 然后,以表格形式13 - 3,16 - 2,19 - 1,22 - 1.抱歉坏英语

You can do something like: 你可以这样做:

Map<Integer, Integer> numberCountMap = ....
for (int i=0; i<numbers.length; i++) {
     numberCountMap.compute(numbers[i], (key, value) -> value == null ? 1 : value + 1);
}   
//print map or sort by value if you need most frequent one to be on top

This will do the job 这将完成这项工作

import java.util.HashSet;
import java.util.Set;
public class NumbersInArray {
    public static void main(String[] args) {
        int [] arr = {1,2,1,1,5,5,5,3,4,5,6};
        Set<Integer> set = new HashSet();

        //adding numbers to set will remove duplicates
        for(int i =0 ; i<arr.length;i++) {
            set.add(arr[i]);
        }
        int counter = 0;
        int[] arrayToCheck = set.stream().mapToInt(Number::intValue).toArray();
        for(int i = 0; i<set.size(); i++) {
            counter = 0;
            for(int j =0; j<arr.length;j++) {
                if(arrayToCheck[i]== arr[j]) {
                    counter++;
                }   
            }
            System.out.println(arrayToCheck[i] + "-" + counter);
        }
    }
}

In Java 8 you can do this 在Java 8中,您可以执行此操作

Map<Integer, Long> freq = Arrays.stream(array).boxed().
                collect(Collectors.groupingBy(Integer::intValue, Collectors.counting()));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM