小编joh*_*384的帖子

如何处理相关的数据绑定?

我经常发现自己遇到了控件的两个(相关)值得到更新的问题,并且两者都会触发昂贵的操作,或者控件可能会暂时处于不一致状态.

例如,考虑一个数据绑定,其中两个值(x,y)相互减去,最终结果用作某些其他属性z的除数:

z /(x - y)

如果x和y绑定到某个外部值,那么一次更新一个可能导致意外除零错误,具体取决于首先更新哪个属性以及另一个属性的旧值.更新属性z的代码只是监听x和y中的更改 - 它无法事先知道另一个属性的另一个更新.

现在这个问题很容易避免,但还有其他类似的情况,比如设置宽度和高度...我是否立即调整窗口大小或等待另一个更改?我是否立即为指定的宽度和高度分配内存,还是等待?如果宽度和高度是1和1百万,然后更新到100万和1,那么暂时我的宽度和高度为100万x 100万...

这可能是一个相当普遍的问题,虽然对我来说特别适用于JavaFX Bindings.我对如何处理这些情况感兴趣,而不会遇到未定义的行为或执行昂贵的操作,只要另一个绑定发生变化就需要重做.

到目前为止我为避免这些情况所做的事情是在设置新值之前首先清除绑定到已知值,但这对代码更新它真正不应该知道的绑定负担.

binding javafx-2

6
推荐指数
1
解决办法
1910
查看次数

是否可以通过收集器对每个列表进行操作而不创建中间映射?

我有以下代码在List上执行分组,然后对每个分组列表进行操作,然后将其转换为单个项目:

Map<Integer, List<Record>> recordsGroupedById = myList.stream()
    .collect(Collectors.groupingBy(r -> r.get("complex_id")));

List<Complex> whatIwant = recordsGroupedById.values().stream().map(this::toComplex)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

toComplex功能如下:

Complex toComplex(List<Record> records);
Run Code Online (Sandbox Code Playgroud)

我觉得我可以在不创建中间地图的情况下做到这一点,也许使用reduce.有任何想法吗?

输入流按照我想在流中顺序分组的元素进行排序.在正常的循环结构中,我能够确定下一组何时开始并在那时创建一个"复杂".

java java-8 java-stream

3
推荐指数
1
解决办法
806
查看次数

标签 统计

binding ×1

java ×1

java-8 ×1

java-stream ×1

javafx-2 ×1