打印int数组java中每个值的重复数量

时间:2017-03-08 19:47:41

标签: java arrays sorting multidimensional-array

我是java的新手,必须完成这项任务。问题是,如何从数组中计算方法中的所有重复项并将其列为:

int [] arr = new int[] {2,5,6,1,2,1,5,3,6,1,2,1,5};
Arrays.sort(arr);

值必须按整数排序,并按以下方式列出:

  • 1 - 4
  • 2 - 3
  • 3 - 1
  • 5 - 3
  • 6 - 2
希望它能有所作为。

3 个答案:

答案 0 :(得分:1)

您可以像这样使用地图:

int[] arr = new int[]{2, 5, 6, 1, 2, 1, 5, 3, 6, 1, 2, 1, 5};
Arrays.sort(arr);
Map<Integer, Integer> map = new HashMap<>();
for (Integer i : arr) {
    //if the key exit then increment it else add a new element
    if (map.containsKey(i)) {
        map.put(i, map.get(i)+1);
    }else{
       map.put(i, 1);
    }
}
//display your map
map.forEach((key, value) -> {
    System.out.println(". " + key + " - " + value);
});

这将告诉你:

.1 - 4
.2 - 3
.3 - 1
.5 - 3
.6 - 2

答案 1 :(得分:1)

您可以使用TreeMap来保持按键排序的项目,只需为每次出现增加一个计数器。

import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class Counter {
    public static void main(String[] args) {
        int[] arr = { 2, 5, 6, 1, 2, 1, 5, 3, 6, 1, 2, 1, 5 };
        Map<Integer, Integer> frequency = count(arr);

        for (Entry<Integer, Integer> freq : frequency.entrySet()) {
            System.out.printf("%s - %s%n", freq.getKey(), freq.getValue());
        }
    }

    public static Map<Integer, Integer> count(int[] items) {
        Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
        for (int item : items) {
            map.put(item, 1 + (map.containsKey(item) ? map.get(item).intValue() : 0));
        }
        return map;
    }
}

答案 2 :(得分:1)

您也可以在一行中完成。

@Override
public Completable loginUserThatIsAlreadySavedInDevice(String password) {
    return getUserIdAlreadySavedInDevice()
            .flatMapCompletable(s -> login(password, s))

}