[英]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.