2017-07-31 53 views
0

我的數據集是由到期日和金額組成的付款時間表。我將它存儲在TreeMap中。Peek提前到下一個地圖條目

Map<LocalDate, BigDecimal> paymentSchedule = new TreeMap<>(); 
paymentSchedule.put(LocalDate.parse("2017-01-01", formatter), new BigDecimal("1000")); 
paymentSchedule.put(LocalDate.parse("2017-02-01", formatter), new BigDecimal("1000")); 
paymentSchedule.put(LocalDate.parse("2017-03-01", formatter), new BigDecimal("1000")); 
paymentSchedule.put(LocalDate.parse("2017-04-01", formatter), new BigDecimal("1000")); 
paymentSchedule.put(LocalDate.parse("2017-05-01", formatter), new BigDecimal("1000")); 
paymentSchedule.put(LocalDate.parse("2017-06-01", formatter), new BigDecimal("1000")); 

for (Map.Entry<LocalDate, BigDecimal> paymentPeriod : paymentSchedule.entrySet()) { 
    LocalDate dueDate = paymentPeriod.getKey(); 
    BigDecimal amountDue = paymentPeriod.getValue(); 
} 

如何在迭代過程中「窺探前方」而不進行迭代?

例如,當我使用Map.Entry處理{2017-03-01,1000}時,我想查找計算的下一個到期日期。

+0

這是你需要的嗎? https://stackoverflow.com/questions/30099237/how-to-get-the-previous-key-value-and-the-next-key-value-in-maps – isaace

+0

番石榴有一個偷看的迭代器。 – shmosel

+0

@isaace工作 –

回答

0

不使用任何外部庫,你可以使用老式簡單地創建從你的entrySet一個List和環比列表,與指數環:

final List<Map.Entry<LocalDate, BigDecimal>> entryList = new ArrayList<>(paymentSchedule.entrySet()); 
for (int i = 0; i < entryList.size(); i++) { 
    Map.Entry<LocalDate, BigDecimal> paymentPeriod = entryList.get(i); 
    if (i < entryList.size() - 1) { 
     Map.Entry<LocalDate, BigDecimal> nextPaymentPeriod = entryList.get(i + 1); 
    } 
    LocalDate dueDate = paymentPeriod.getKey(); 
    BigDecimal amountDue = paymentPeriod.getValue(); 
} 

根據您的地圖這種方法的大小將會產生更好的性能,因爲查找下一個條目是O(1)而創建ListO(n),導致整體複雜度爲O(n)。其中NavigableMap.higherKey()功能是O(log(n))導致總複雜度爲O(n log(n))

相關問題