Java 根据可变对象字段对对象列表进行排序

Java 根据可变对象字段对对象列表进行排序,java,sorting,Java,Sorting,我有一份产品清单。我想按数量递减地对产品进行分类 public class Product { String name; int quantity; Product(String name, int quantity) { this.name=name; this.quantity=quantity } } 默认情况下,列表中有4种产品,数量为0 List<Product> products = new ArrayLi

我有一份产品清单。我想按数量递减地对产品进行分类

public class Product {
    String name;
    int quantity;
    Product(String name, int quantity) {
        this.name=name;
        this.quantity=quantity
    }
}
默认情况下,列表中有4种产品,数量为0

List<Product> products = new ArrayList();
products.add(new Product("Book",0));
products.add(new Product("Table",0));
products.add(new Product("Chair",0));
products.add(new Product("Pen",0));
List products=new ArrayList();
添加(新产品(“书籍”,0));
添加(新产品(“表”,0));
添加(新产品(“椅子”,0));
添加(新产品(“Pen”,0));
此外,用户还可以从web UI中逐个递增或递减数量(通过单击位于每个产品旁边的递增或递减按钮)

例如,如果用户增加“笔”产品数量,则“笔”产品应重新定位到列表顶部

每次,递增或递减过程,我都需要对列表重新排序。然而,在每个递增或递减过程中运行排序算法是非常低效的,尤其是当列表中有很多项时

我还没有使用任何排序算法。但我相信,如果列表中的项目太多,并且只增加了一个产品,那么所有列表都必须重新排序。我认为,这是低效的,所以我想问的是,有没有其他方法来解决这类问题


那么,如何对这些类型的列表进行排序呢?

Java8对列表进行排序的方法。内部是合并排序

    products.sort(Comparator.comparing(Product::getQuantity).reversed());

流示例

products.stream()
                .sorted(Comparator.comparing(Product::getQuantity, Comparator.reverseOrder()))
                .forEach(System.out::println);

Java8排序列表的方法。内部是合并排序

    products.sort(Comparator.comparing(Product::getQuantity).reversed());

流示例

products.stream()
                .sorted(Comparator.comparing(Product::getQuantity, Comparator.reverseOrder()))
                .forEach(System.out::println);

我们在
Collections
类中有一个
sort
方法,可以按照
ASC
顺序对产品进行排序,如:

Collections.sort(products, Comparator.comparing(Product::getQuantity)); 
对于
DESC
,我们需要调用
reversed
方法:

Collections.sort(products, Comparator.comparing(Product::getQuantity).reversed());

我们在
Collections
类中有一个
sort
方法,可以按照
ASC
顺序对产品进行排序,如:

Collections.sort(products, Comparator.comparing(Product::getQuantity)); 
对于
DESC
,我们需要调用
reversed
方法:

Collections.sort(products, Comparator.comparing(Product::getQuantity).reversed());

这是什么语言?排序的代码在哪里(我假设您有这样的代码,并且您已经对其进行了基准测试,发现它“很慢”)?@auburg it is Java。我还没有使用任何排序算法。但我相信,如果列表中的项目太多,并且只增加了一个产品,那么所有列表都必须重新排序。我认为,这是低效的,所以我想问的是,有没有其他方法可以解决这类问题。请阅读以下内容:-除非你将拥有几十万种产品,否则即使担心性能也毫无意义。每次为几个产品重新排序的运行时成本可以忽略不计。只有当您遇到问题时,才应该担心优化,然后只在分析之后。这是什么语言?排序的代码在哪里(我假设您有这样的代码,并且您已经对其进行了基准测试,发现它“很慢”)?@auburg it is Java。我还没有使用任何排序算法。但我相信,如果列表中的项目太多,并且只增加了一个产品,那么所有列表都必须重新排序。我认为,这是低效的,所以我想问的是,有没有其他方法可以解决这类问题。请阅读以下内容:-除非你将拥有几十万种产品,否则即使担心性能也毫无意义。每次为几个产品重新排序的运行时成本可以忽略不计。只有当您遇到问题时,才应该担心优化,然后在分析之后。