我有下面這個方法,它遍歷地圖并根據某些標準洗掉資料。
private Map<String, String> getSearchResultsWithoutOverUsedData(
Map<String, String> searchDocumentResults
) {
List<String> overUsedTestData = this.extractOverUsedTestData(
searchDocumentResults
);
if (overUsedTestData.size() > 0) {
this.deleteSearchResultsAboveThresholdUsage(overUsedTestData);
searchDocumentResults.keySet().removeAll(overUsedTestData);
}
return searchDocumentResults;
}
當該行searchDocumentResults.keySet().removeAll(overUsedTestData);被執行時,它有時會拋出以下錯誤。
java.lang.UnsupportedOperationException: null
at java.util.Collections$UnmodifiableCollection.removeAll(Collections.java:1070) ~[?:1.8.0_302]
at TestDataHandler.getSearchResultsWithoutOverUsedData(TestDataHandler.java:55) ~[MyService-1.0.jar:?]
由于引數 searchDocumentsResults 不是最終的,我很困惑為什么它是不可變的。任何幫助理解這一點將不勝感激。提前致謝。
uj5u.com熱心網友回復:
如果searchDocumentResultsmap 恰好是不可變的,您應該先創建它的副本,然后洗掉overUsedTestData:
searchDocumentResults = new HashMap<>(searchDocumentResults);
searchDocumentResults.keySet().removeAll(overUsedTestData);
或使用流 API:
searchDocumentResults = searchDocumentResults.entrySet()
.stream()
.filter(e -> !overUsedTestData.contains(e.getKey()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/373544.html
