tekman22
tekman22

Reputation: 233

Java - Going through arraylist and outputting highest to lowest numbers?

Is there a way to make it so I can sort through an ArrayList output the highest number found along with the lowest number found? The way I have it now is a "shoppinglist" which is set up like this:

public void addToBag(String anyItem, int anyUnits, double anyCost){
    int checkUnits = anyUnits;
    double checkCost = anyCost;
    if(checkUnits < 0 || checkCost < 0){
        System.out.println("You must enter a value equal to or greater than 0!");
    }else{
    shoppingBag.add(new Item(anyItem, anyUnits, anyCost));
}
}

and the output which only outputs the list

  public void calculateSalesReceipt(){
    System.out.println("Enter the sales tax percentage (ex. 0.08 for 8%) or type \"random\" for a random number: ");
    double tax = keybd.nextDouble();
    if(tax < 0){
        System.out.println("You must enter a value equal to or greater than 0!");
    }else{
    getPricePreTax();
    total = total;
    taxCost = total * tax;
    finaltotal = total + taxCost;
    System.out.println("Sales Receipt");
    System.out.println("-------------");
    for(Item currentProduct : shoppingBag){
        System.out.println(currentProduct.getName() + " - " + currentProduct.getUnits() + " units " + " - $" + currentProduct.getCost());
    }
    System.out.println("Total cost: $" + total);
    System.out.println("Total tax: $" + taxCost);
    System.out.println("Total cost with tax: $" + finaltotal);
    System.out.println("Do you have any coupons? Enter \"yes\" or \"no\"");
    String answer = keybd.next();
    if(answer.equals("yes")){
                applyCoupon();
            }else if(answer.equals("no")){
            System.out.println("Thank you!");
        }else if(answer != "yes" || answer != "no"){
            System.out.println("Thank you!");
        }
    System.out.println("Coupon discounts: $" + couponAmount);
    System.out.println("Grand total: $" + (finaltotal-couponAmount));
}
}

Thanks!

EDIT:

Would this work?

 public void getLargest(){
    for(Item currentProduct : shoppingBag){
        System.out.println(Collections.max());
    }
}

Upvotes: 0

Views: 846

Answers (3)

KarlP
KarlP

Reputation: 5201

What do you want to sort on? Cost?

You can create an new class; CostComparator implementing a Comparator<Item>, and compare Items depeding on their price.

Upvotes: 0

sjr
sjr

Reputation: 9895

Using Google Guava:

Function<Item, Double> itemCostFunction = new Function<Item, Double>() {
  @Override public Double apply(Item item) {
    return item.getCost();
  }
};

List<Item> sortedItems = Ordering.natural().onResultOf(itemCostFunction).sortedCopy(shoppingBag);

Now

Item biggest = Iterables.getLast(sortedItems);  // costliest
Item smallest = sortedItems.get(0);  // cheapest 

Upvotes: 1

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272832

You probably want Collections.max() (and Collections.min(), respectively). If you want the entire list in order, you probably want Collections.sort().

Upvotes: 5

Related Questions