【问题标题】:Deleting from an ObservableList in javafx从 javafx 中的 ObservableList 中删除
【发布时间】:2018-12-23 14:27:14
【问题描述】:

我有两个 ObservableList,其中一个包含一些歌曲,另一个包含与歌曲相关的目录。

我希望在从其 ObservableList 中删除一个目录时,将包含该目录的所有歌曲从其 ObservableList 中删除。 但是当我这样做时,只删除了奇数 id 的歌曲和偶数 id 的歌曲!!!

我的 ObservableLists 在不同的类中,“控制器”是包含 ObservableLists 的类的对象。 这是我的代码:

private static ObservableList<SongModel> songModelObservableList = FXCollections.observableArrayList();
private static ObservableList<Directory_Model> directoryModelObservableList = FXCollections.observableArrayList();

现在是我删除目录的代码:

for (int j = 0 ; j < controller.getSongModelObservableList().size() ; j++)
   if (controller.getSongModelObservableList().get(j).getPath().contains(controller.getDirectoryModelObservableList().get(i).getPath())){
         controller.getSongModelObservableList().remove(controller.getSongModelObservableList().get(j));

          }
    controller.getDirectoryModelObservableList().remove(controller.getDirectoryModelObservableList().get(i));

这里。在第一个 if 中,我检查哪个 songModel(我的歌曲类)具有将其从 songObservableList 中删除的目录路径。

有什么办法解决这个问题吗?我想删除所有目录中的歌曲,而不是带有奇数 ID 的歌曲。

【问题讨论】:

标签: javafx observablelist


【解决方案1】:

如果您从列表中删除索引j 处的元素,则修改后位置j 处的项目是先前位于索引j+1 处的项目。由于您在循环的每次迭代后递增索引,因此如果您在迭代中删除一个项目,则会跳过一个项目。如果没有删除任何项目,则只增加索引:

final String removePath = controller.getDirectoryModelObservableList().get(i).getPath();
for (int j = 0; j < controller.getSongModelObservableList().size();)
   if (controller.getSongModelObservableList().get(j).getPath().contains(removePath)){
       controller.getSongModelObservableList().remove(j);
   } else {
       j++;
   }
}
controller.getDirectoryModelObservableList().remove(i);

PredicateremoveIf 一起使用会更简单:

final String removePath = controller.getDirectoryModelObservableList().get(i).getPath();
controller.getSongModelObservableList().removeIf(element -> element.getPath().contains(removePath));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多