当前位置: 首页 > 面试题库 >

如何将可观察集转换为可观察列表

骆昊阳
2023-03-14
问题内容

我正在尝试将项目设置为表视图,但是setitems方法需要一个可观察的列表,而我的模型中却有一个可观察的集合.FXCollections实用程序类没有给定可观察的集合来创建可观察的列表的方法。类强制转换异常(按预期)。

目前,我正在使用这种代码

new ObservableListWrapper<E>(new ArrayList<E>(pojo.getObservableSet()));

而且我有一些问题:

  • 在表中进行编辑是否会按预期更新基础集?
  • 这是这样做的“正确”方法吗

简而言之,我需要样式指南或最佳做法,以便在可观察集和可观察列表之间进行转换,因为我希望在构建Java fx GUI时会做很多工作


问题答案:

在表中进行编辑是否会按预期更新基础集?

不,因为,您正在复制集合:

new ArrayList<E>(pojo.getObservableSet())

是这样做的“正确”方法吗?

我认为正确的方法是不这样做。Set不是List,反之亦然。两者都有特定的矛盾。例如,列表是有序的,并且集合不包含重复的元素。

而且,也FXCollections都没有Bindings提供这种东西。

我希望将集合保留为一组以强制执行唯一性

我想您可以编写一个custom
ObservableList,例如Parent::children具有类似的行为。IllegalArgumentException如果添加了重复的子项,则抛出。如果您查看源代码,将会看到它是一个VetoableListDecorator扩展。您可以编写自己的:

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import com.sun.javafx.collections.VetoableListDecorator;

public class CustomObservableList<E> extends VetoableListDecorator<E> {

    public CustomObservableList(ObservableList<E> decorated) {
        super(decorated);
    }

    @Override
    protected void onProposedChange(List<E> toBeAdded, int... indexes) {
        for (E e : toBeAdded) {
            if (contains(e)) {
                throw new IllegalArgumentException("Duplicament element added");
            }
        }
    }
}

class Test {
    public static void main(String[] args) {
        Object o1 = new Object();
        Object o2 = new Object();

        Set<Object> set = new HashSet<Object>();
        set.add(o1);
        CustomObservableList<Object> list = new CustomObservableList<Object>(FXCollections.observableArrayList(set));
        html" target="_blank">list.add(o2);
        list.add(o1); // throw Exception
    }
}


 类似资料:
  • 问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。

  • 有没有办法将ArrayList转换为ObservableList?我想在不遍历ArrayList的情况下完成它。 更具体地说,我使用ORMLite从数据库中获取数据,我需要作为从DB获取数据的方法的输出。 目前我正在做这样的事情: 我想这样做:

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从