2016-07-23 44 views
0

我有「預訂」對象列表一個新的。 「預訂」具有以下屬性: - 長房間ID。日期fecha。長期訂單。雙重價格。檢查Java列表,並創建根據一些標準

在某一個時刻,這個名單可能是:

1 - 22/07/2016 - 15
1 - 23/07/2016 - 15
1 - 24/07/2016 - 15
4 - 01/08/2016 - 25
4 - 02/08/2016 - 25
4 - 03/08/2016 - 25
4 - 04/08/2016 - 25

這意味着,存在一種用於房間1,總值45 7月22日和24之間的預訂。 在8月1日至4日期間,預訂了房間4,100的預訂。

我想創建一個「OrderDetail」對象的新列表。「的OrderDetail」對象有以下屬性:
- roomId,InitialDate,FinalDate,價格

所以,我的名單,這將創建兩個的OrderDetail對象,它會添加到列表中的OrderDetail。 這些對象將是:

  • roomId = 1,InitialDate = 22/07/2016,FinalDate = 24/07/206,價格= 45
  • roomId = 4,InitialDate = 2016年1月8日, FinalDate = 04/08/2016,價格= 100.

有人可以幫我嗎?我認爲這不是一個困難的代碼,但我通常不會編程,所以我有一些問題需要解決。

這是我的低劣代碼:

L1 = (this is a database query) 
L2 = (this is the same query) (so I have two identical lists) 

List<OrderDetail> L3 = new ArrayList<OrderDetail>(); 
Long roomId = null; 
Date InititalDate; 
Date FinalDate; 
double price = 0; 

for (int i = 0; i < L1.size(); i++) { 

    InititalDate = null; 
    Booking current = L1.get(i); 

    roomId = current.getRoomId(); 
    InititalDate = current.getFecha(); 

    Iterator<Booking> it = L2.iterator(); 
    while (it.hasNext()) { 
     Booking current2 = it.next(); 
     if (current2.getRoomId.equals(roomId)) { 
      precio = precio + current2.getPrecio(); 
      FinalDate = current2.getFecha(); 
      i++; 
     } 

    } 

    OrderDetail = new OrderDetail(roomId, InitialDate, FinalDate, precio); 
    L3.add(OrderDetail); 

} 

return L3; 

}

+0

你到目前爲止嘗試過哪些代碼? –

+0

如果你沒有發佈它,我們如何幫助你處理你的代碼? – TDG

+0

創建一個'OrderDetail'類。編寫一個構造函數,它具有3個屬性。創建列表'列表 myList中=新的ArrayList ();',然後你可以用'myList.add(orderDetailObject)添加你的對象;' – Blobonat

回答

0

我學習Java8,只是想實現你問什麼,有streams

Booking b1 = new Booking(1L, LocalDate.of(2016, 7, 22), 15d); 
    Booking b2 = new Booking(1L, LocalDate.of(2016, 7, 23), 15d); 
    Booking b3 = new Booking(1L, LocalDate.of(2016, 7, 24), 15d); 
    Booking b4 = new Booking(4L, LocalDate.of(2016, 8, 1), 25d); 
    Booking b5 = new Booking(4L, LocalDate.of(2016, 8, 2), 25d); 
    Booking b6 = new Booking(4L, LocalDate.of(2016, 8, 3), 25d); 
    Booking b7 = new Booking(4L, LocalDate.of(2016, 8, 4), 25d); 

    List<Booking> bookings = Arrays.asList(b1, b2, b3, b4, b5, b6, b7); 

    List<OrderDetail> orderDetails = bookings 
      .stream().collect(Collectors.groupingBy(Booking::getRoomId)).values().stream().map(i -> new OrderDetail(i.get(0).getRoomId(), 
        i.get(0).getBookedDate(), i.get(i.size() - 1).getBookedDate(), i.stream().collect(Collectors.summingDouble(Booking::getPrice)))) 
      .collect(Collectors.toList()); 

    System.out.println(orderDetails); 

輸出

[OrderDetail [roomId=1, startDate=2016-07-22, endDate=2016-07-24, totalPrice=45.0], OrderDetail [roomId=4, startDate=2016-08-01, endDate=2016-08-04, totalPrice=100.0]] 

請注意:我相信可能有更好的方法來實現這一點,請添加你的答案,很高興從中學習