ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-ObservableList中setAll()方法的ObservableSet等效项是什么

2019-11-21 13:00:45  阅读:196  来源: 互联网

标签:java-8 collections javafx java


我应该在JavaFX ObservableSet集合的设置器中使用哪种方法来清除集合并将其初始化为给定的集合? ObservableList具有setAll(Collection)方法,该方法用于通过首先清除列表来初始化列表.

我所看到的最接近的是addAll(Collection),它不会事先清除设置.在我的项目中设置集合时,我希望它具有将ObservableSet设置为新集合的正常行为,但是根据javadoc:

Adds all of the elements in the specified collection to this set if they’re not already present (optional operation). If the specified collection is also a set, the addAll operation effectively modifies this set so that its value is the union of the two sets.

我不能只使用=来设置值,因为在setter中传递的参数是一个set,而ObservableSet是一个内部包装程序,外界对此一无所知.我也想避免先清除然后再添加全部.

解决方法:

如您在ObservableSet的Javadoc中所见,没有这种方法.

实际上,方法ObservableList::setAll只是一个方便的“快捷方式”:

Clears the ObservableList and add all elements from the collection.

JavaFX中的通用实现ModifiableObservableListBase先清除然后再添加allAll:

@Override
public boolean setAll(Collection<? extends E> col) {
    beginChange();
    try {
        clear();
        addAll(col);
    } finally {
        endChange();
    }
    return true;
}

使用setAll快捷方式的主要优点是,只有一个“大” change event (ListChangeListener.Change)被发送到侦听器.更好的性能.

实际上,您可能想用自己的setAll扩展com.sun.javafx.collections.ObservableSetWrapper,但是由于事件SetChangeListener.Change是一项基本更改,因此不会带来性能上的好处:m个已删除事件,n个已添加事件将被发送.

因此,您别无选择:

set.clear();
set.addAll(otherSet);

或复制一个新的集合并分配:

set = FXCollections.observableSet(otherSet);

标签:java-8,collections,javafx,java
来源: https://codeday.me/bug/20191121/2052171.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有