Переписать с использование Java 8 Stream

162
26 мая 2018, 19:40
private int chooseTaxi(District whereIsClient) {
    int taxiIndex = 0;
    int distance;
    int minDistance = 10;
    for (Taxi taxi : taxis) {
        if ((distance = District.calcDistance(taxi.getLocation(), whereIsClient)) < minDistance) {
            minDistance = distance;
            taxiIndex = taxis.indexOf(taxi);
        }
    }
    return taxiIndex;
}

Метод должен возвратить индекс такси, для которого будет выгоднее всего подъехать к whereIsClient. taxis - LinkedList, calcDistance - вычисляет расстояние между клиентом и такси. Как это переписать с использованием stream? Если возможно, конечно.

Answer 1

Можно написать следующим образом:

int taxiIndex = taxis.stream()
    .min(Comparator.comparing(
        taxi -> District.calcDistance(taxi.getLocation(), whereIsClient)
    ))
    .map(taxis::indexOf)
    .orElse(-1);
READ ALSO
Singleton Java без synchronized и volatile

Singleton Java без synchronized и volatile

Правильная ли такая реализация потокобезопасного Singleton? И как его можно ещё реализовать без применения synchronized и volatile?

187
Случайная генерация двух дат до 30 дней

Случайная генерация двух дат до 30 дней

Есть два поля начальная дата и конечная дата На входе получить начальная дата c текущей датой, конечная дата должна быть выше начальная дата,...

223