3 回答

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊
迭代器:
可能是最簡單的解決方案。由于 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:
這將是最佳的。然而,即使使用輕量級的東西,例如 H2 或 SQLite,也需要重構(gòu)。在非常輕量級的應(yīng)用程序中也不是一個選項。
高效:
如果您只按類別或名稱搜索,您可以使用 2 個地圖:
Map<String, Note> notesByCategory;
Map<String, Note> notesBytName
這將需要O(n)內(nèi)存來存儲映射,但會及時進(jìn)行非常高效的查找O(1)(與當(dāng)前的O(n)相比)。我會避免這種解決方案,因為很容易在筆記內(nèi)容和地圖之間實現(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)驗 獲得超3個贊
為什么不將筆記本信息存儲在 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;
}
}
需要注意的每個數(shù)據(jù)操作都會影響存儲它的筆記本

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