3 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
迭代器:
可能是最簡(jiǎn)單的解決方案。由于 java 在循環(huán)中使用迭代器foreach,因此性能是相同的。
For (NoteBook noteBook: noteBooks) {
Iterator<Note> it = noteBooks.getNoteList().iterator();
while (it.hasNext()) {
Note note = it.next();
if (note.getCategory().equals(someString)) {
it.remove();
}
}
}
SQL:
這將是最佳的。然而,即使使用輕量級(jí)的東西,例如 H2 或 SQLite,也需要重構(gòu)。在非常輕量級(jí)的應(yīng)用程序中也不是一個(gè)選項(xiàng)。
高效:
如果您只按類別或名稱搜索,您可以使用 2 個(gè)地圖:
Map<String, Note> notesByCategory;
Map<String, Note> notesBytName
這將需要O(n)內(nèi)存來存儲(chǔ)映射,但會(huì)及時(shí)進(jìn)行非常高效的查找O(1)(與當(dāng)前的O(n)相比)。我會(huì)避免這種解決方案,因?yàn)楹苋菀自诠P記內(nèi)容和地圖之間實(shí)現(xiàn)不一致的狀態(tài)。
編輯:
var newNoteNames = newList.stream().map(Note::getName).collect(Collectors.toSet());
var oldNoteNames = noteBooks.stream().flatMap(Notebook::getNodeList).map(Note::getName).collect(Collectors.toSet());
var removedNames = oldNoteNames.removeAll(newNoteNames);
for (var removedName : removedNames) {
for (NoteBook noteBook: noteBooks) {
Iterator<Note> it = noteBooks.getNoteList().iterator();
while (it.hasNext()) {
Note note = it.next();
if (note.getName().contains(removedName)) {
it.remove();
}
}
}
}

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
為什么不將筆記本信息存儲(chǔ)在 note 類中呢?
public class Note {
private NoteBook sourceNoteBook;
private String name;
private String category;
private String details;
public Note(NoteBook sourceNoteBook,String name, String category, String details) {
this.sourceNoteBook = sourceNoteBook;
this.name = name;
this.category = category;
this.details = details;
}
}
需要注意的每個(gè)數(shù)據(jù)操作都會(huì)影響存儲(chǔ)它的筆記本

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng)鍵是筆記并且值是筆記本時(shí),您可以創(chuàng)建一個(gè)地圖 keySet 將返回給用戶,一旦他選擇了該鍵,您就有了知道要從哪個(gè)筆記本中刪除的值,并且您有可以刪除該筆記本的鍵筆記。這是你的意思嗎?
添加回答
舉報(bào)