2017-09-09 43 views
0

我有兩個LinkedList:newLinkedList和oldLinkedList,都包含BID類對象。下面是我的出價類:基於Java中的類變量自定義排序用戶定義對象的2個LinkedLists

public class Bid { 

    private int quantity; 
    private double bidPrice; 

    public int getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 

    public double getBidprice() { 
     return bidPrice; 
    } 

    public void setBidprice(double bidPrice) { 
     this.bidPrice = bidPrice; 
    } 
} 

現在我必須創建一個包含基於BID類的價格變量newLinkedList和oldLinkedList的排序元素的新LinkedListlist。 如果我在LinkedList中獲得相同的價格,那麼我必須保留newLinkedList BID類對象並刪除舊的。

這意味着新的LinkedList必須包含基於價格變量排序的Bid類對象。

這是我的主要功能:

public static void main(String[] args) throws InterruptedException, IOException { 

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("Enter size of linkedlist 1 "); 
    int size1 = Integer.parseInt(br.readLine()); 
    System.out.println("Enter size of linkedlist 2 "); 
    int size2 = Integer.parseInt(br.readLine()); 
    LinkedList<Bid> oldLinkedList= addElementsToList(size1); 
    LinkedList<Bid> newLinkedList= addElementsToList(size2); 

    /* 
      SORT BOTH THE LINKED LISTS HERE 
    */ 

} 

public static LinkedList<Bid> addElementsToList(int size) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    LinkedList<Bid> bidList = new LinkedList<Bid>(); 

    for (int i = 0; i < size; i++) { 
     Bid bid = new Bid(); 
     System.out.println("Enter bid price of Object " + i); 
     bid.setBidprice(Double.parseDouble(br.readLine())); 
     System.out.println("Enter bid quantity of Object " + i); 
     bid.setQuantity(Integer.parseInt(br.readLine())); 
     bidList.add(bid); 
    } 
    return bidList; 
} 
+0

你有兩個鏈表。然後使用嵌套for循環,比較器或任何類似 – emotionlessbananas

+0

你的問題是什麼? – Turing85

+0

「將兩個鏈接列表合併爲一個並對最終列表進行排序。」但LinkedList包含「Bid」類對象。所以排序必須根據「Bid」類對象的價格變量完成。 –

回答

1

也許這就是你想要的,每個出價oldList,檢查它的價格已經存在於newList。如果存在,則不執行任何操作,否則將其添加到newList,然後對最後一個newList進行排序。你可以測試它。

注意:我不確定您是否真的想要比較兩個雙重價格。

boolean containsSamePrice(LinkedList<Bid> list, double price) { 
     for (Bid bid : list) { 
      if (bid.getBidprice() == price) { 
       return true; 
      } 
     } 
     return false; 
    } 

LinkedList<Bid> mergeAndSort(LinkedList<Bid> newLinkedList, LinkedList<Bid> oldLinkedList) { 
    for (Bid oldBid : oldLinkedList) { 
     if (!containsSamePrice(newLinkedList, oldBid.getBidprice())) { 
      newLinkedList.add(oldBid); 
     } 
    } 
    Comparator<Bid> comparator = new Comparator<Bid>() { 
     @Override 
     public int compare(Bid o1, Bid o2) { 
      if (o1.getBidprice() < o2.getBidprice()) 
       return -1; 
      if (o2.getBidprice() == o2.getBidprice()) 
       return 0; 
      return 1; 
     } 
    }; 
    Collections.sort(newLinkedList, comparator); 
    return newLinkedList; 
} 
+0

謝謝先生。是的,我想比較雙倍價格,但有一個小的變化,如果oldbid.getprice()等於newLinkedList中的任何價格,那麼我必須將newLinkedList Bid對象添加到Sorted列表中,但不是oldBid來自oldLinkedList –

+0

是的,我們可以使用newLinkedList作爲排序列表。 –

+0

非常感謝。它解決了我的問題 –

0

您可以在Bid類Comparator接口,並使用Collections.sort()方法。