Task: Display a list of 10 cities with the current ambient temperature. List in alphabetical order. Separately display a list of cities where it is snowing now (either it is raining, or overcast, or sunny). Also keep on screen how long the program was running

What is required: To sort the cities in the output alphabetically.

My code is:

package devjatnadcat; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class Devjatnadcat1 { public static void main(String[] args) throws IOException { long m = System.currentTimeMillis() / 1000; Document doc = Jsoup.connect("http://travel.ru/weather/russia/").get(); Elements trElements = doc.getElementsByAttributeValue("class", "b-table_row b-forecast"); trElements.forEach(trElement -> { // выбираем элементы по классу b-table_cell Elements elementsByClass = trElement.getElementsByClass("b-table_cell"); // первая колонка - Город System.out.print(elementsByClass.get(0).text() + " "); // Парсим вторую колонку Element element = elementsByClass.get(1); // температура String temp = element.getElementsByClass("b-forecast_temp").text(); System.out.println(temp); }); System.out.println(""); trElements.forEach(trElement -> { // выбираем элементы по классу b-table_cell Elements elementsByClass = trElement.getElementsByClass("b-table_cell"); // первая колонка - Город System.out.print(elementsByClass.get(0).text() + " - "); // Парсим вторую колонку Element element = elementsByClass.get(1); // осадки String precipitation = element.getElementsByClass("b-forecast_description").text(); System.out.println(precipitation); }); System.out.println("Время выполнения : " + ((double) (System.currentTimeMillis() - m))); } } 
  • There were ideas to save the row of the first column in the array variables, but failed ( - Marat Zimnurov

2 answers 2

Explore the java.util package. There is everything you need

 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Devjatnadcat1 { public static void main(String... args) throws IOException { long m = System.currentTimeMillis(); List<City> cities = new ArrayList<>(); Document doc = Jsoup.connect("http://travel.ru/weather/russia/").get(); Elements trElements = doc.getElementsByAttributeValue("class", "b-table_row b-forecast"); trElements.forEach(trElement -> { // выбираем элементы по классу b-table_cell Elements elementsByClass = trElement.getElementsByClass("b-table_cell"); // первая колонка - Город String name = elementsByClass.get(0).text(); // Парсим вторую колонку Element element = elementsByClass.get(1); // температура String temperature = element.getElementsByClass("b-forecast_temp").text(); // осадки String precipitation = element.getElementsByClass("b-forecast_description").text(); cities.add(new City(name, temperature, precipitation)); }); Collections.sort(cities); cities.forEach(city -> System.out.println(city.toTemperature())); System.out.println(); cities.forEach(city -> System.out.println(city.toForecast())); System.out.println(); System.out.println("Время выполнения : " + (System.currentTimeMillis() - m) + "мс"); } } class City implements Comparable<City> { private String name; private String temperature; private String forecast; public City(String name, String temperature, String forecast) { this.name = name; this.temperature = temperature; this.forecast = forecast; } @Override public int compareTo(City o) { return name.compareTo(o.name); } public String toTemperature() { return name + " " + temperature; } public String toForecast() { return name + " - " + forecast; } } 
  • you have artifacts at launch ... - Marat Zimnurov
  • City {name = 'Armavir', temperature = '+ 2 / -1', forecast = 'cloudy with clearings'} City {name = 'Vyborg', temperature = '+ 3 / +3', forecast = 'cloudy'} City {name = 'Irkutsk', temperature = '- 11 / -21', forecast = 'partly cloudy'} City {name = 'Krasnaya Polyana', temperature = '+ 8 / -2', forecast = 'cloudy'} City {name = 'Murmansk', temperature = '- 3 / -6', forecast = 'snowfall'} City {name = 'Rostov the Great', temperature = '- 2 / -2', forecast = 'cloudy'} City {name = 'Salekhard', temperature = '- 25 / -32', forecast = 'partly cloudy'} - Marat Zimnurov
  • @ MaratZymnurov what artifacts? - Mikhail Vaysman
  • something went wrong - Marat Zimnurov
  • one
    What this is not suitable? He does not sort? - Mikhail Vaysman
 /* *Вывести на экран список из 10 городов с текущей температурой окружающей среды. Список вывести по алфавиту. Отдельно вывести список городов, где сейчас идет снег(или дождь, или пасмурно, или солнечно). Также вести на экран сколько времени выполнялась программа */ package devjatnadcat; /** * * @author Марат */ import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Devjatnadcat1 { public static void main(String... args) throws IOException { long m = System.currentTimeMillis(); List<City> cities = new ArrayList<>(); Document doc = Jsoup.connect("http://travel.ru/weather/russia/").get(); Elements trElements = doc.getElementsByAttributeValue("class", "b-table_row b-forecast"); trElements.forEach(trElement -> { // выбираем элементы по классу b-table_cell Elements elementsByClass = trElement.getElementsByClass("b-table_cell"); // первая колонка - Город String name = elementsByClass.get(0).text(); // Парсим вторую колонку Element element = elementsByClass.get(1); // температура String temperature = element.getElementsByClass("b-forecast_temp").text(); // осадки String precipitation = element.getElementsByClass("b-forecast_description").text(); cities.add(new City(name, temperature, precipitation)); }); Collections.sort(cities); cities.forEach(System.out::println); System.out.println(" "); trElements.forEach(trElement ->{ Elements elementsByClass = trElement.getElementsByClass("b-table_cell"); // выбираем элементы по классу b-table_cell System.out.print(elementsByClass.get(0).text() + " - "); // первая колонка - Город // Парсим вторую колонку Element element = elementsByClass.get(1); String temp = element.getElementsByClass("b-forecast_temp").text(); // температура String precipitation = element.getElementsByClass("b-forecast_description").text(); // осадки System.out.println(precipitation); }); System.out.println("Время выполнения : " + (System.currentTimeMillis() - m) + "мс"); } } class City implements Comparable<City> { private String name; private String temperature; private String forecast; public City(String name, String temperature, String forecast) { this.name = name; this.temperature = temperature; this.forecast = forecast; } @Override public int compareTo(City o) { return name.compareTo(o.name); } @Override public String toString() { return name + " " + temperature + " "; } } 
  • Why do you do the same thing 2 times? when my already doing it. - Mikhail Vaysman
  • @MikhailVaysman in the assignment two conclusions) - Marat Zimnurov
  • You parse the same page twice. My version does this in a single pass. - Mikhail Vaysman