JavaFX FliteredList 不跟随基础列表的变化
JavaFX FliteredList not following the change of underlying list
我有一个整数数组列表 (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,
这是预期的(或至少是可解释的)行为。 documentation for FXCollections.observableList(...)
表示:
Note that mutation operations made directly to the underlying list are not reported to observers of any ObservableList that wraps it.
FilteredList
通过观察其源列表 (oList
) 并在 oList
的内容更改时更新其内容来工作。由于没有触发 oList
添加值 10
的通知,过滤后的列表永远不会添加它。
我有一个整数数组列表 (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,
这是预期的(或至少是可解释的)行为。 documentation for FXCollections.observableList(...)
表示:
Note that mutation operations made directly to the underlying list are not reported to observers of any ObservableList that wraps it.
FilteredList
通过观察其源列表 (oList
) 并在 oList
的内容更改时更新其内容来工作。由于没有触发 oList
添加值 10
的通知,过滤后的列表永远不会添加它。