簡體   English   中英

Jsoup:對元素組進行排序

[英]Jsoup: Sorting group of elements

我正在使用Jsoup顯示50個項目的列表,每個項目包含4個元素的組:標題,價格,位置和日期。

try {   
    Document doc = Jsoup.connect(URL).userAgent("Chrome").timeout(5000).get();

    Elements titles = doc.select("myCssQuery");
    Elements prices = doc.select("myCssQuery");
    Elements locations = doc.select("myCssQuery");
    Elements dates = doc.select("myCssQuery");
    //Elements itemUrls = doc.select("myCssQuery");

    for(int i = 0; i < titles.size()-1; i++) {
       System.out.println(titles.get(i).text());
       System.out.println(prices.get(i).text());
       System.out.println(locations.get(i).text());
       System.out.println(dates.get(i).text());
       System.out.println();
       //System.out.println(itemUrls.get(i).attr("abs:href"));
   }

} catch (IOException e) {
    e.printStackTrace();
}

現在,我必須按價格對列表進行排序(當前為字符串,但可以將其轉換為int)。 但是我知道完成此操作的唯一方法是使用數據庫,在這種情況下,我不願意這樣做。 有沒有不用數據庫就可以實現這一目標的方法?

只需使用Collections.sort() ,我為您提供了一個簡短的工具,這是按價格升序排序的,您可以將compareTo()更改為另一種排序列表的方式:

public static void main(String[] args) throws IOException {
    Document doc = Jsoup.connect(URL).userAgent("Chrome").timeout(5000).get();

    Elements titles = doc.select("myCssQuery");
    Elements prices = doc.select("myCssQuery");
    Elements locations = doc.select("myCssQuery");
    Elements dates = doc.select("myCssQuery");

    List<Item> items = new ArrayList<>();
    Item item;
    for(int i = 0; i < titles.size()-1; i++) {
        item = new Item(titles.get(i).text(), Integer.parseInt(prices.get(i).text().replaceAll("\\D+","")), locations.get(i).text(), dates.get(i).text());    
        items.add(item);
    }

    Collections.sort(items, new Comparator<Item>() {
        @Override
        public int compare(Item item1, Item item2) {
            return item1.compareTo(item2);
        }
    });

}

public static class Item implements Comparable {
    private String title;
    private int price;
    private String location;
    private String date;

       public Item(String title, int price, String location, String date) {
        this.title = title;
        this.price = price;
        this.location = location;
        this.date = date;
       }

    @Override
    public int compareTo(Object o) {
        Item item = (Item) o;
        if (this.price == item.price) {
            return 0;
        } else if (this.price > item.price) {
            return 1;
        } else {
            return -1;
        }
    }
}

或者,您可以將sort實現為compare(),而無需在Item類中實現Comparable,如下所示:

Collections.sort(items, new Comparator<Item>() {
    @Override
    public int compare(Item item1, Item item2) {
        if (item1.getPrice() == item2.getPrice()) {
            return 0;
        } else if (item1.getPrice() > item2.getPrice()) {
            return 1;
        } else {
            return -1;
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM