Java: разделить массив по значению - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь разбить массив на подмассивы по значению. Например (с удалением функции main и удалением имени класса):

int[] arr = {1, 5, 3, 4, 2, 2, 5, 3, 1};
for (int i : splitByVal(arr)) {
    System.out.println(i);
}

У меня уже есть один способ сделать это:

public int[][] splitByVal(arr) {
    int prevItem = arr[0];
    ArrayList<Integer[]> chunks = new ArrayList<Integer[]>();
    ArrayList<Integer> currentChunk = new ArrayList<Integer>();
    for (int i : arr) {
        if (i == prevItem) {
            currentChunk.add(i);
        }
        else {
            chunks.add((Integer[]) currentChunk.toArray());
            currentChunk.clear();
        }
        prevItem = i;
    }
    return chunks.toArray()
}

Что я хочу знать: Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 04 мая 2020

Как было правильно упомянуто в комментарии, вы не предоставили определение slope в своем коде. Так что не совсем понятно, что делает ваш код.

Однако, это только один из возможных способов сделать это, если я вас правильно понял:

public int[][] splitByValue(final int[] arr) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int number : arr) {
        map.put(number, map.getOrDefault(number, 0) + 1);
    }
    int[][] result = new int[map.keySet().size()][];
    int i = 0;
    for (Integer key : map.keySet()) {
        result[i] = new int[map.get(key)];
        for (int j = 0; j < result[i].length; j++) {
            result[i][j] = key;
        }
        i++;
    }        
    return result;
}

Здесь предполагается, что Вы имеете дело только с массивом целых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...