How can I sort my items by both price and name?

12,460

Correction to the Item class definition.

You need to assign parameters to the fields (In OP you've assign field to parameter)

Use Comparator object parameter to implement sorting for individual field.

   List<Item> items=new ArrayList<Item>();
   items.add(new Item("A",1.2));
   items.add(new Item("Z",10.2));
   items.add(new Item("B",2.3));
   items.add(new Item("Y",5.4));
   items.add(new Item("B",1.3));


  java.util.Collections.sort(items,new Comparator<Item>()
   {
       public int compare(Item a,Item b)
        {
          if(a.getName().compareTo(b.getName())>0)
            return 1;
          else
          if(a.getName().compareTo(b.getName())<0)
            return -1;
          else
             return 0;            
        }
        public boolean equals(Object a)
         {
            return false;
         }
    });
Share:
12,460
allencoded
Author by

allencoded

Updated on June 04, 2022

Comments

  • allencoded
    allencoded almost 2 years

    So I have a question on what to do next. I am working on this program and the requirements are.

    Wings Coffee Shop

    A local coffee shop sells a variety of different items shown below to their customers. You are asked to write a Java application that can be used to keep track of these items. Additionally, this program provides a way to print out a listing of the items.

    Item Name            Price
    Coffee               $1.00
    Water                $2.00
    Milk                 $1.50
    Bagel                $1.25
    Donut                $0.75
    

    Your program will create a class, named Item. This class has the following:

    • A String instance variable to hold the item name
    • A double instance variable to hold the price
    • A constructor that takes a String and double to ini

    Once you have this class created, you write a second class named CoffeeDriver. This class has the following methods:

    • sortName – this method sorts the array of items by item name and then displays the name and price of all items on the screen
    • sortPrice – this method sorts the array of items by item price and then displays the name and price of all items on the screen
    • main - It creates an array of Item objects using the data above to set each Item's information.
    • A get and set method for each instance variable

    This is all I have so far. I am having a hard time thinking how to sort an array. So if I sort 2 different arrays how do I keep them in proper order. Like for instance coffee = $1 how do I sort it and keep those together.

    import java.util.Scanner;
    
    public class CoffeeDriver {
    
    //main method
        public static void main (String[] args){
            String[] itemName = {"Coffee, Water, Milk, Donut, Bagel"};
            double[] itemPrice = {1.00, 2.00, 1.50, 0.75, 1.25};
            Scanner input = new Scanner(System.in);
            String decision;
    
            System.out.println ("Welcome to Wings Coffee Shop");
            System.out.println ("We have a great list of tasty items on our menu.");
            System.out.println ("Would you like to see these items sorted by");
            System.out.println ("name or by price? (n/p): ");
            decision = input.nextLine();
                if (decision == "n"){
                    sortName(itemName);
                    }
                else {
                    sortPrice(itemPrice);
                    }
        }
    
    //method to sort by item name and display
        public static void sortName (String[] array){
            for (int i = 0; i < array.length; i++){
                System.out.println (array[i].toString());
                }
        }
    
    //method to sort by item price and display
        public static void sortPrice (double[] array){
            for (int i = 0; i < array.length; i++){
                System.out.println (array[i]);
                }
        }
    }
    
    
    public class Item {
        private String name;
        private double price;
    
        Item(String itemName, double itemPrice){
            itemName = name;
            itemPrice= price;
        }
    
        public String getName(){
            return name;
        }
        public void setName(String itemName){
            itemName = name;
        }
    
        public double getPrice(){
        return price;
        }
    
        public void setPrice(double itemPrice){
            itemPrice = price;
        }
    }
    
  • Costi Ciudatu
    Costi Ciudatu about 13 years
    For sorting arrays, java.util.Arrays should be used instead of java.util.Collections
  • Cameron Skinner
    Cameron Skinner about 13 years
    @Costi: Good point. I tend to prefer Lists over arrays, but thanks for pointing that out.
  • Joachim Sauer
    Joachim Sauer about 13 years
    Why don't you simply make the compare method return a.getName().compareTo(b.getName())? Also: a Comparator usually doesn't need an equals() implementation.
  • KV Prajapati
    KV Prajapati about 13 years
    Agree! That's true but in this code I just want to add pattern of return value of compare method for comparing non-string data.