Similar to @dasblinkenlight answer,
Declare new Object Prices to hold the values
class Prices {
BigDecimal price1;
BigDecimal price2;
public Prices(BigDecimal price1, BigDecimal price2) {
this.price1 = price1;
this.price2 = price2;
}
public BigDecimal getPrice1() {
return price1;
}
public void setPrice1(BigDecimal price1) {
this.price1 = price1;
}
public BigDecimal getPrice2() {
return price2;
}
public void setPrice2(BigDecimal price2) {
this.price2 = price2;
}
@Override
public String toString(){
return String.valueOf(price1).concat(" ").concat(String.valueOf(price2));
}
}
Declare variable as Big Decimal since price involved. Lot of answers your can found in SO why you should use BigDecimal instead of double .
For your requirement, I don't think you need to Sort the elements based on price2.
Your requirement is to remove the least price2 element and sort by price1
class PriceComparator implements Comparator<Prices>{
@Override
public int compare(Prices o1, Prices o2) {
return o2.getPrice1().compareTo(o1.getPrice1());
}
public int getLeastPrice2(List<Prices> collections){
int i =0;
BigDecimal lowValue = collections.get(0).getPrice2();
for (int j = 1; j < collections.size(); j++) {
if (collections.get(j).getPrice2().compareTo(lowValue) < 0 ) {
lowValue = collections.get(j).getPrice2();
i = j;
}
}
return i;
}
}
Comparator based on price1 and additional method to find minimum position of price2
Now test
List<Prices> priceList = new ArrayList<Prices>();
Prices p1 = new Prices(BigDecimal.valueOf(1.2), BigDecimal.valueOf(5.1));
Prices p2 = new Prices(BigDecimal.valueOf(3.2), BigDecimal.valueOf(4.2));
Prices p3 = new Prices(BigDecimal.valueOf(1.4), BigDecimal.valueOf(1.4));
Prices p4 = new Prices(BigDecimal.valueOf(1.3), BigDecimal.valueOf(1.1));
priceList.add(p1);
priceList.add(p2);
priceList.add(p3);
priceList.add(p4);
System.out.println(priceList);
PriceComparator priceComparator = new PriceComparator();
priceList.remove(priceComparator.getLeastPrice2(priceList));
System.out.println(priceList);
Collections.sort(priceList, priceComparator);
System.out.println(priceList);
out put
[1.2 5.1, 3.2 4.2, 1.4 1.4, 1.3 1.1]
[1.2 5.1, 3.2 4.2, 1.4 1.4]
[3.2 4.2, 1.4 1.4, 1.2 5.1]