Группировать элементы массива по значению (2 на 2, 3 на 3 и т. Д.) В Java - PullRequest
0 голосов
/ 07 июня 2019

Мне помогли создать функцию в Swift, чтобы подсчитать вхождение (2 на 2, 3 на 3, 10 на 10) из ArrayList<Double>: Swift - сгруппировать элементы массива по значению ( 2 на 2, 3 на 3 и т.д ...)

Теперь я хотел бы перевести это на Java, но я не уверен в нескольких строках. Как я могу это сделать?

Swift версия:

func group(_ array: [Int], coef: Int) -> [Int: Int] {
var result:[Int:Int] = [:]

var start = array[0]
var end = start + coef - 1
var arr  = array

while start <= array[array.count - 1] {
   let count = arr.filter({ $0 >= start && $0 <= end}).count

   result[start] = count
   start = end + 1
   end = start + coef - 1
   arr = Array(arr[count...])
}
return result
}

Что я пробовал в Java:

private HashMap<Integer, Integer> group(ArrayList<Double> array, int coef, Double start) {
        Map<Integer, Integer> result = new HashMap<>();

        Double startFrom = start;
        Double end = startFrom + Double.valueOf(coef)  - 0.1;
        ArrayList<Double> arr = array;

        // This line
        while (startFrom <= array[array.size() - 1]) {

            // This line
            int count = arr.filter({ $0 >= start && $0 <= end}).count;

            // This line
            result[Int(start)] = count;
            startFrom = end + 1;
            end = start + Double.valueOf(coef)  - 0.1;
            // this line
            arr = Array(arr[count...])
        }
        return result;
    }

1 Ответ

0 голосов
/ 08 июня 2019

В Java рекомендуется использовать интерфейсы вместо реальной реализации, поскольку вы используете, интерфейс обеспечивает большую гибкость. Если вы используете реализации и вам нужно что-то изменить, это легко ломается, поэтому ваш код будет хрупким.

private static Map<Integer, Integer> group(List<Double> array, int coef, Double start) {
    Map<Integer, Integer> result = new HashMap<>();

    Double startFrom = start;
    Double finalEnd = startFrom + (double) coef - 1;

    while (startFrom <= array.get(array.size() - 1)) {
        int counter = 0;
        for (Double x : array) {
            if (x >= startFrom && x <= finalEnd) {
                counter++;
            }
        }
        result.put(startFrom.intValue(), counter);
        startFrom = finalEnd + 1;
        finalEnd = startFrom + (double) coef - 1;
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...