我有一个Integers的ArrayList(aList),然后从aList创建一个ObservableList(oList)。将0到10添加到aList,然后从oList中创建FilteredList(fList)。最后,我将10添加到aList,将11添加到oList。我希望在fList中看到10和11,但令人惊讶的是,10不在fList中。这是预期的行为还是错误?
List<Integer> aList = new ArrayList<>();
ObservableList<Integer> oList = FXCollections.observableList(aList);
for (Integer i = 0; i < 10; i++)
aList.add(i);
FilteredList<Integer> fList = new FilteredList<Integer>(oList, i -> { return i > 5; });
aList.add(10);
oList.add(11);
System.out.print("O: ");
for (Integer i : oList)
System.out.print(i + ", ");
System.out.println("");
System.out.print("F: ");
for (Integer i : fList)
System.out.print(i + ", ");
System.out.println("");
这是输出,10不在fList:
O: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
F: 6, 7, 8, 9, 11,
答案 0 :(得分:2)
预期(或至少可解释)行为。 documentation for FXCollections.observableList(...)
说:
请注意,直接对基础列表进行的变异操作不会报告给包装它的任何ObservableList的观察者。
FilteredList
通过观察其源列表(oList
)并在oList
的内容发生更改时更新其内容来工作。由于oList
未添加值10
而未触发任何通知,因此过滤后的列表永远不会添加它。