在 Java(Java 8 及更高版本)中对任何对象列表进行排序的最佳和最简单的方法。让我们根据属性“fruitName”对一篮子水果进行排序
水果POJO:
class Fruit
{
int price;
String fruitName;
public Fruit(int price, String fruitName) {
super();
this.price = price;
this.fruitName = fruitName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getFruitName() {
return fruitName;
}
public void setFruitName(String fruitName) {
this.fruitName = fruitName;
}
@Override
public String toString() {
return "Fruits [price=" + price + ", fruitName=" + fruitName + "]";
}
}
现在让我们将水果添加到列表中,然后对其进行排序
List<Fruit> basketOfFruits = new ArrayList<>();
basketOfFruits.add(new Fruit(123, "oranges"));
basketOfFruits.add(new Fruit(45, "nectarine"));
basketOfFruits.add(new Fruit(369, "blueberries"));
basketOfFruits.add(new Fruit(248, "apple"));
basketOfFruits.add(new Fruit(968, "peaches"));
basketOfFruits.add(new Fruit(436, "grapes"));
basketOfFruits.add(new Fruit(596, "figs"));
//sorting by the property fruitName
Collections.sort(basketOfFruits, (f1, f2)->{return f1.getFruitName().compareTo(f2.getFruitName());});
您现在可以打印列表(即 basketOfFruits),列表中的水果将按 ASCENDING 顺序(按字典顺序)排序。输出将如下所示:
[Fruits [price=248, fruitName=apple], Fruits [price=369, fruitName=blueberries], Fruits [price=596, fruitName=figs], Fruits [price=436, fruitName=grapes], Fruits [price=45, fruitName=nectarine], Fruits [price=123, fruitName=oranges], Fruits [price=968, fruitName=peaches]]
除了 Collections.sort(),还可以使用 Java 流(Java 8 及更高版本)。以下是使用Java流的代码
List<Fruit> sortedFruits = basketOfFruits.stream().sorted( (f1, f2)->{return f1.getFruitName().compareTo(f2.getFruitName());}).collect(Collectors.toList());
这里列表的排序方式与 Collections.sort() 相同,但排序后的项目将存储/收集在另一个列表“sortedFruits”中。所以,如果我们想打印列表的排序项,在这种情况下我们需要打印“sortedFruits”而不是“basketOfFruits”