第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從多個(gè)列表創(chuàng)建匹配對(duì)象的列表并刪除匹配列表中的對(duì)象以使其反映在原始列表中

如何從多個(gè)列表創(chuàng)建匹配對(duì)象的列表并刪除匹配列表中的對(duì)象以使其反映在原始列表中

素胚勾勒不出你 2023-08-16 17:41:42
如果有人問過這個(gè)問題,我很抱歉,但我無法從谷歌搜索中找到類似的內(nèi)容,所以就到這里。假設(shè)我有兩個(gè)對(duì)象筆記本public class NoteBook {    private String name;    private String description;    public NoteBook(String name, String description) {        this.name = name;        this.description = description;    }}和筆記public class Note {    private String sourceNoteBook    private String name;    private String category;    private String details;    public Note(String sourceNoteBook,String name, String category, String details) {        this.sourceNoteBook = sourceNoteBook;        this.name = name;        this.category = category;        this.details = details;    }}在程序中,用戶可以創(chuàng)建多個(gè)NoteBook對(duì)象,每個(gè)NoteBook存儲(chǔ)可變數(shù)量的注釋。最終我想添加一個(gè)搜索功能,可以按類別或名稱搜索筆記并返回找到的筆記列表。通常我會(huì)使用 2 個(gè) For 循環(huán)來迭代筆記本列表,然后迭代每個(gè)筆記本的筆記列表并比較字符串。像這樣的東西:    For (NoteBook noteBook: noteBooks) {        For(Note note :noteBooks.getNoteList){            if (note.getCategory().contains(someString)) {                matchingNotes.add(notes);            }        }    }但是,我現(xiàn)在希望能夠從匹配注釋列表中刪除注釋,以便原始筆記本中的注釋也被刪除。存儲(chǔ)和搜索這兩個(gè)類的最佳方法是什么,以便我可以實(shí)現(xiàn)這樣的功能。編輯:只是為了澄清,最終結(jié)果是我希望用戶能夠在所有筆記本中搜索筆記類別,然后程序?qū)⒎祷嘏c該類別匹配的筆記列表。然后,他/她可以從該列表中刪除筆記,這樣它也會(huì)在原始筆記本中刪除。例如,完全從程序中刪除。
查看完整描述

3 回答

?
慕碼人2483693

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();

      }

    }

  }

}


查看完整回答
反對(duì) 回復(fù) 2023-08-16
?
繁星點(diǎn)點(diǎn)滴滴

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ǔ)它的筆記本


查看完整回答
反對(duì) 回復(fù) 2023-08-16
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

當(dāng)鍵是筆記并且值是筆記本時(shí),您可以創(chuàng)建一個(gè)地圖 keySet 將返回給用戶,一旦他選擇了該鍵,您就有了知道要從哪個(gè)筆記本中刪除的值,并且您有可以刪除該筆記本的鍵筆記。這是你的意思嗎?



查看完整回答
反對(duì) 回復(fù) 2023-08-16
  • 3 回答
  • 0 關(guān)注
  • 164 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)