2016-04-24 9 views
0

私はStringのリストを持っています。元のリストが更新されたときにフィルタリングされたリストも更新されるように、このリストのフィルタリングされたバージョンを別のリストに保存します。例えばフィルタリングされたリストの変更を反映する方法

:要素がstringsに追加されるたびに

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

filteredStringsが更新されません。 stringsに要素が追加されるたびにfilteredStringsが更新される方法はありますか?または、希望の結果を得るために私が採用できる似たような選択肢はありますか?

答えて

1

filteredStringsは完全に新しいオブジェクトなので、変更は両方に行われません。

変更を反映したい場合は、おそらく独自のクラスを作成する必要があります。

ArrayList<String>を拡張すると起動し、リストの中だけでそれらの文字列を使用しない場合は、唯一の#


別のオプションで始まる文字列を受け入れるようにaddメソッドをオーバーライドするには、addを上書きしないことですメソッドを追加しますが、カスタムリストの変更が反映されたリストが常に返されるArrayList<String> startsWithFilter(String filter)メソッドを追加します。

+0

他の要素を除外したくないので、特定の要素をフィルタリングしたいだけです。だから私は、 "#"で始まる要素や "!"で始まる要素を含むフィルターされたリストを持つことができます。おそらく。 – driima

+0

したがって、すべての文字列を含むリストを1つ作成し、後でこのリストを任意の文字でフィルタリングするだけでなく、オリジナルを変更したときにフィルタリングされたリストを更新しますか?申し訳ありませんが、完全に新しいオブジェクトであるため、可能であるかどうかはわかりません。私は別の解決策で答えを更新しました –

関連する問題