Сортировка данных при работе с jsoup (Java)

518
30 декабря 2016, 10:40

Задача : Вывести на экран список из 10 городов с текущей температурой окружающей среды. Список вывести по алфавиту. Отдельно вывести список городов, где сейчас идет снег(или дождь, или пасмурно, или солнечно). Также вести на экран сколько времени выполнялась программа

Что требуется : Чтобы в выводе сортировка городов выполнялась по алфавиту.

Мой код :

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)));
    }
}
Answer 1

Изучите пакет java.util. Там есть все, что нужно

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; }
}
Answer 2
/*
*Вывести на экран список из 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 + " ";
    }
}
READ ALSO
Не выводит одно слово при формировании списка словосочетаний

Не выводит одно слово при формировании списка словосочетаний

Из кода выводится список сформированных по длине словосочетания, которые в дальнейшем печатаются на imageНе могу придумать условие, чтобы...

390
Отслеживать открытие Spinner

Отслеживать открытие Spinner

Хочу отслеживать событие открытия SpinnerПопробовал повесить на него View

363
Json java. Parse to string

Json java. Parse to string

Как правильно парсить данный json

473