2016-01-25 4 views
2

Я хочу перебирать список в заданном порядке с помощью Итератора интерфейса. В этом случае я хочу перебрать список (listofproducts) в убывающем продукте.JAVA Iterator с условием

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; 
} 

У меня есть общедоступный метод получения цены. Как я могу это решить?

+1

Вы должны написать компаратор, отсортировать список с компаратором (что вполне expesive) и итерация отсортированный список – ParkerHalo

+0

Любые шансы сделать это без сортировки списка? –

+0

Это действительно зависит от того, что вы пытаетесь сделать. Если вы хотите просмотреть список в определенном порядке, вам, скорее всего, придется его сортировать. – npinti

ответ

2

Если объем данных не слишком большой, вы можете сделать следующее, не думая о Performace:

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()); 
    } 
}); 

Это создаст копию исходного списка, который будет сортироваться компаратором. После этого, итерация sortList будут отсортированы по price (по убыванию)

2

Вы должны использовать интерфейс Comparable<T> реализовать свой comparaison логику:

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()); 
    } 
} 

Теперь, чтобы отсортировать список, вы можете просто использовать:

Collections.sort(listOfProduct); 
+0

Реализация интерфейса 'Comparable' имеет еще одно преимущество: нет необходимости в геттерах! Вы можете просто получить доступ к закрытым полям – ParkerHalo

+0

@ParkerHalo Да, и мы используем по существу «Компаратор», когда у нас есть ** несколько логик comparaison ** для реализации для того же объекта того, что нельзя отменить с помощью «Comparator» :) –

0

Существует два способа достичь этого. С помощью Comparator он прост в использовании, вы должны создать новую реализацию интерфейса Comparator, а затем реализовать методы сравнения и равенства. Это действительно мощно, потому что вы можете создать несколько компараторов для сортировки в разных полях.

Вы также можете сделать продукт как сравнимый, а затем реализовать метод compareTo.

Вы можете увидеть sample with camparator and comparable interfaces

Смежные вопросы