2015-10-20 26 views
1

我需要從TreeMap中刪除並獲取第一個元素或最低元素。但是,我忽略了一些無法立即做到的事情。TreeMap獲取第一個元素並刪除

removedValue = treeList.remove(treeList.firstEntry().getValue()); 

該行必須訪問地圖兩次,但它似乎是要走的路。我不認爲它應該有很大的區別,因爲當添加了某些東西的時候地圖會被排序,但我會期望它的功能。

+2

難道你不能'removedValue = treeList.pollFirstEntry()。getValue();'? –

+1

@AlexisC。這應該是一個答案。 –

+0

@AlexisC。它是否也將列表中的條目從列表中刪除? – Madmenyo

回答

4

如果需要,既除去並獲取進入,你可以使用pollFirstEntry()(假設你正在使用的變量的類型是至少NavigableMap - 但因爲你正在使用firstEntry,我想這是)。

T2 removedValue = null; 
Map.Entry<T1, T2> entry = treeList.pollFirstEntry(); 
if(entry != null) { 
    removedValue = entry.getValue(); 
} 

注意null檢查,以避免NPE如果映射爲空(它會返回在這種情況下null)。

+0

我會在輪詢之前使用treeList.isEmpty()檢查,而不是之後的空檢查,以使其更清晰。 – Karussell

1

如果您使用的是Java 8,我會建議:

Optional<T2> removedValue = Optional.ofNullable(treeList.pollFirstEntry()).map(Map.Entry::getValue); 

這與空列表科佩斯以及您就可以使用removedValue.isPresent()檢查返回值。

相關問題