我有一个String列表,我希望将此列表的过滤版本存储在另一个列表中,这样当更新原始列表时,过滤后的列表也会更新。
例如:
List<String> strings = new ArrayList<>();
List<String> filteredStrings = strings.stream().filter(string -> string.startsWith("#")).collect(Collectors.toList());
每当将元素添加到filteredStrings
时, strings
都不会更新。有没有一种方法可以在元素添加到filteredStrings
时更新strings
?或者我可以采用任何类似的替代方案来实现我想要的结果吗?
答案 0 :(得分:1)
filteredStrings
是一个全新的对象,因此不会对两者进行更改。
如果您想要反映变化,那么您很可能必须编写自己的课程。
从扩展ArrayList<String>
开始,并覆盖add
方法,仅接受以#
另一个选项,如果您不想要列表中的那些字符串,则不要覆盖add
方法,而是添加一个ArrayList<String> startsWithFilter(String filter)
方法,该方法将始终返回带有反映的列表更改自定义列表。