2016-04-24 35 views
0

我有一個字符串列表,我想將此列表的已過濾版本存儲在另一個列表中,以便在更新原始列表時更新已過濾列表。如何反映已過濾列表中的更改

例如:

List<String> strings = new ArrayList<>(); 
List<String> filteredStrings = strings.stream().filter(string -> string.startsWith("#")).collect(Collectors.toList()); 

filteredStrings每當元素被添加到strings不被更新。有沒有一種方法可以在元素添加到strings時更新filteredStrings?或者有什麼類似的選擇可以用來實現我想要的結果?

回答

1

filteredStrings是一個全新的對象,因此不會對兩者進行更改。

如果你想反映變化,那麼你最好寫自己的班級。

開始延伸ArrayList<String>,並覆蓋add方法只接受與#


另一種選擇開頭的字符串,如果你不想只是在列表中這些字符串是不覆蓋add方法,但添加ArrayList<String> startsWithFilter(String filter)方法將始終返回您的自定義列表反映更改的列表。

+0

我不想排除其他元素,我只是想過濾某些元素。所以我可以有一個過濾列表,其中包含以「#」開頭的元素,也包含以「!」開頭的元素。也許。 – driima

+0

所以你想要一個包含所有字符串的列表,然後用任何字符過濾該列表,但是當你改變原來的時候更新過濾列表?對不起,不知道這是可能的,因爲它是一個全新的對象。我已經用另一個解決方案更新了答案 –

相關問題