如何反映已过滤列表中的更改

时间:2016-04-24 15:12:19

标签: java list filter

我有一个String列表,我希望将此列表的过滤版本存储在另一个列表中,这样当更新原始列表时,过滤后的列表也会更新。

例如:

List<String> strings = new ArrayList<>();
List<String> filteredStrings = strings.stream().filter(string -> string.startsWith("#")).collect(Collectors.toList());
每当将元素添加到filteredStrings时,

strings都不会更新。有没有一种方法可以在元素添加到filteredStrings时更新strings?或者我可以采用任何类似的替代方案来实现我想要的结果吗?

1 个答案:

答案 0 :(得分:1)

filteredStrings是一个全新的对象,因此不会对两者进行更改。

如果您想要反映变化,那么您很可能必须编写自己的课程。

从扩展ArrayList<String>开始,并覆盖add方法,仅接受以#

开头的字符串

另一个选项,如果您不想要列表中的那些字符串,则不要覆盖add方法,而是添加一个ArrayList<String> startsWithFilter(String filter)方法,该方法将始终返回带有反映的列表更改自定义列表。