带条件的JAVA迭代器

带条件的JAVA迭代器,java,interface,iterator,Java,Interface,Iterator,我想使用接口迭代器按指定顺序迭代列表。 在本例中,我希望以product.prize降序迭代列表(listofproducts) public class Invoice { private static int static_id; private int id; private String date; private List<Product> listofproduct = new ArrayList<Product>();

我想使用接口迭代器按指定顺序迭代列表。 在本例中,我希望以product.prize降序迭代列表(listofproducts)

public class Invoice {

    private static int static_id;

    private int id;
    private String date;
    private List<Product> listofproduct = new ArrayList<Product>();
    private boolean open;
}


public class Product {

    private static int count = 0;

    private int code;
    private String name;
    private String description;
    private double price;
}
公共类发票{
私有静态int static_id;
私有int-id;
私有字符串日期;
private-List-listofproduct=new-ArrayList();
私有布尔开放;
}
公共类产品{
私有静态整数计数=0;
私有整数码;
私有字符串名称;
私有字符串描述;
私人双价;
}
我有一个公开的方法来获取价格。
如何解决这个问题?

如果数据量不太大,您可以在不考虑性能的情况下执行以下操作:

List<Product> sortList = new ArrayList<>(origList);
Collections.sort(sortList, new Comparator<Product>() {
    @Override
    public int compare(Product arg0, Product arg1) {
        return (int)(arg1.getPrice() - arg0.getPrice());
    }
});
List-sortList=new-ArrayList(origList);
Collections.sort(sortList,newcomparator(){
@凌驾
公共整数比较(产品arg0、产品arg1){
返回(int)(arg1.getPrice()-arg0.getPrice());
}
});

这将创建原始列表的副本,该副本将由比较程序排序。之后,迭代
排序列表
将按
价格
(降序)

排序。您应该使用
可比
界面来实现比较逻辑

 class Product implements Comparable<Product>{

    private static int count = 0;

    private int code;
    private String name;
    private String description;
    private Double price;


    @Override
    public int compareTo(Product p) {
        return price.compareTo(p.getPrice());
    }
}

实现这一目标有两种方法。使用Comparator很容易使用,您应该创建接口Comparator的新实现,然后实现compare和equals方法。它非常强大,因为您可以创建几个比较器来在不同的字段中进行排序

您还可以使您的产品具有可比性,然后实现compareTo方法


你可以看到

你必须编写一个比较器,用这个比较器对列表进行排序(这是非常昂贵的),然后迭代排序后的列表。如果不对列表进行排序,就有机会这样做吗?这取决于你想做什么。如果您想按特定顺序浏览列表,那么您很可能需要对其进行排序。@MassimoLavermicocca我认为如果不对列表进行排序,您是无法做到这一点的。唯一的另一种可能性是保留已排序的列表,并在每次插入元素时保持排序(插入时成本更高),实现接口
Comparable
还有另一个优点:不需要getter!您只需直接访问专用数据库即可fields@ParkerHalo是的,当我们有多个Comparison逻辑来实现同一个对象时,我们基本上使用了
比较器
:)
Collections.sort(listOfProduct);