Как реализовать данный метод при помощи стримов?
/**
* Get all cities near current city in radius.
*
* @param cityName - city
* @param radius - radius in kilometers for search
* @throws IllegalArgumentException if city with cityName city doesn't exist.
*/
public List<String> getCitiesNear(String cityName, int radius) {
List<String> nearCities = new ArrayList<>();
List<Integer> distances = new ArrayList<>();
for (int i = 0; i < this.citiesNames().size(); i++) {
distances.add(this.getDistance(cityName, this.citiesNames().get(i)));
}
for (int i = 0; i < distances.size(); i++) {
if (distances.get(i) <= radius) {
if (!this.citiesNames().get(i).equals(cityName)) {
nearCities.add(this.citiesNames().get(i));
}
}
}
return nearCities;
}
Метод citiesNames() возвращает List<"String">. Список имен городов.
Метод int getDistance(String srcCityName, String destCityName) возвращает расстояние между srcCityName и srcCityName.
Запрещено использовать циклы, итераторы внутри данного класса. Можно использовать только streams и методы принимающие предикаты. Нельзя объявлять другие поля в классе.
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
Я Вам код писать не буду, а дам алгоритм, который приведет Вас к победе.
- Читаете про Stream API, смотрите примеры кодa, делаете простые вещи.
- Выполняете задание из Вашего вопроса.
- Получаете ошибки - компиляции, выполнения, неправильные результаты.
- Смотрите на эти ошибки, и через мозговые усилия пытаетесь понять в чем дело.
- Приходите на этот сайт и задаете конкретный вопрос про то, что у Вас не получилось.
Автор решения: Alex Rudenko
→ Ссылка
Несколько более конкретные советы по переписыванию кода с использованием Stream API:
- Для данной задачи достаточно будет использовать промежуточную операцию
Stream::filter, чтобы исключить заданный город и найти города для заданного радиуса, и простой коллекторCollectors.toList()для получения списка результатов. - Исходный стрим нужно будет взять для списка городов
this.citiesNames()
Готовое решение (тело метода) getCitiesNear займёт 3-4 строки с учётом форматирования кода.