我有一个字符串列表,我想将该列表的过滤版本存储在另一个列表中,这样当原始列表更新时,过滤列表也会更新。
例如:
List<String> strings = new ArrayList<>();
List<String> filteredStrings = strings.stream().filter(string -> string.startsWith("#")).collect(Collectors.toList());
每当将元素添加到 strings
时,filteredStrings
都不会更新。有没有一种方法可以在将元素添加到 strings
时更新 filteredStrings
?或者我可以采用任何类似的替代方案来实现我想要的结果吗?
最佳答案
filteredStrings
是一个全新的对象,因此不会对两者进行更改。
如果您想反射(reflect)更改,那么您很可能必须编写自己的类。
从扩展ArrayList<String>
开始,并覆盖add
方法仅接受以 #
开头的字符串
如果您不想要列表中的那些字符串,另一个选项是不覆盖 add
方法,但添加 ArrayList<String> startsWithFilter(String filter)
方法将始终返回包含自定义列表的反射(reflect)更改的列表。
关于java - 如何反射(reflect)过滤列表中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824949/