Поиск позиции примитивов в списке

Учитывая следующий код:

     for (int i = 0; i < noRooms; i++) {
        String roomPrice = response.xmlPath().getString("ABC_AvailRS.AccommodationSearchResponse.Accommodations.AccommodationSegment[0].AccommodationUnits.AccommodationUnit[" + i + "].RoomRate.@Amount");
        roomPrices.add(roomPrice);
        List<Float> floatRoomPrices = roomPrices.stream()
                .map(Float::parseFloat)
                .collect(Collectors.toList());

        float min = floatRoomPrices.stream().min(Float::compare).get();
        float max = floatRoomPrices.stream().max(Float::compare).get();

    }

... в котором я могу взять список сумм как Strings Amount = "92.65", преобразовать их в числа с плавающей запятой и добавить в список, я могу четко найти наибольшую и наименьшую сумму.

  1. как я могу получить среднее значение floatRoomPrices?
  2. как я могу найти его позицию в списке, например. [4] если это был средний диапазон из 10 значений с плавающей запятой?

Отсортируйте список. Тогда вы точно знаете, где находятся ваши min, max и mid.

Dewick47 16.03.2018 16:52

обычно средняя точка в массиве или списке длины n находится в n/2. так что просто отсортируйте свое плавание, как floatRoomPrices.sort(Float::compare); а затем midPoint = floatRoomPrices.get(floatRoomPrices.size()/2);

arthur 16.03.2018 16:56

@arthur - спасибо

Steerpike 16.03.2018 17:16

Почему вы повторяете эту операцию на каждой итерации цикла?

Holger 16.03.2018 18:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете быстро найти эту информацию с помощью списка отсортированный. Вот простой пример.

    public static void main(String[] args) {
         List<Float> floats = new ArrayList<>();
         floats.add(7.85f);
         floats.add(0.85f);
         floats.add(9.01f);
         floats.add(2.78f);
         Collections.sort(floats); // in ascending order, adjust sorting method as preferred - maybe you can utilize stream().sorted

         float min = floats.get(0);
         float max = floats.get(floats.size() - 1);
         int midIndex = floats.size() / 2; // Answer to #2
         float midValue = floats.get(midIndex); // Answer to #1

         System.out.println("Min: " + min + "\nMax: " + max + "\nMid index: " + midIndex + "\nMid value: " + midValue);
    }

Это дает результат:

Min: 0.85
Max: 9.01
Mid index: 2
Mid value: 7.85

Спасибо, это здорово, но как мне также получить значение индекса в коллекции?

Steerpike 16.03.2018 17:22

Средний индекс - это значение индекса. [0.85, 2.78, 7.85, 9.01] -> 2 - это индекс, в котором находится среднее значение. Если это не то, что вы ищете, можете перефразировать?

Dewick47 16.03.2018 17:28

извините, я был глуп и торопился - это отлично отвечает - спасибо

Steerpike 16.03.2018 17:29
Когда использовать LinkedList вместо ArrayList? (спойлер: почти никогда). Хотя в этом конкретном случае использования List нет никакой причины. Используйте double[] doubleRoomPrices = roomPrices.stream() .mapToDouble(Double::parseDouble).toArray();; вы можете преобразовать окончательные значения результата в float, если хотите. Выполнение расчетов в float не дает никаких преимуществ, иногда даже медленнее. В случае Float в штучной упаковке, большую часть времени он медленнее ...
Holger 16.03.2018 18:17

@Holger Не знаю, почему я использовал LinkedList. Очевидно, время для перерыва на кофе. Спасибо, что указали на это.

Dewick47 16.03.2018 18:49

@ Холгер Шипилев однажды сказал - кто сказал, что LinkedList - это плохо? Лучше всего протестировать вашу реализацию GC (он имел в виду шенандоа)

Eugene 16.03.2018 21:23

Другие вопросы по теме