并行流可能会产生与Java 8中的串行流不同的结果吗?根据我的信息,并行流与串行流相同,除了分成多个子流.这是一个速度问题.完成对元素的所有操作,并在最后组合子流的结果.最后,在我看来,对于并行和串行流,操作的结果应该是相同的.所以我的问题是,这段代码可能会给我一个不同的结果吗?如果有可能,为什么会发生?
int[] i = {1, 2, 5, 10, 9, 7, 25, 24, 26, 34, 21, 23, 23, 25, 27, 852, 654, 25, 58};
Double serial = Arrays.stream(i).filter(si -> {
return si > 5;
}).mapToDouble(Double::new).map(NewClass::add).reduce(Math::atan2).getAsDouble();
Double parallel = Arrays.stream(i).filter(si -> {
return si > 5;
}).parallel().mapToDouble(Double::new).map(NewClass::add).reduce(Math::atan2).getAsDouble();
System.out.println("serial: " + serial);
System.out.println("parallel: " + parallel);
Run Code Online (Sandbox Code Playgroud)
public static double add(double i) {
return i + 0.005;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
serial: 3.6971567726175894E-23
parallel: 0.779264049587662
Run Code Online (Sandbox Code Playgroud) 我需要找到概率指数分布的公式,但我不知道如何找到它:(这个公式必须具有强大的统计属性(它不能丢弃随机的任何结果,以保持随机实例的不受限制的搜索)
我试图找到公式,这将在这样的方法中工作:
rand.getNextDuobleExpDistrib();
Run Code Online (Sandbox Code Playgroud)
我现在有这个代码,但根据"输入分析器",它无法正常工作
public double getNext() {
return -lampda * Math.log(rand.nextDouble());
}
Run Code Online (Sandbox Code Playgroud) 我想制作一个带有可拖动节点的窗格.当我选择一些节点时,我想为这个节点绘制一些边框.实际上,我已经完成了,但我的麻烦是,我的解决方案从Node中删除了所有其他样式.这是非常难看的解决方案.我想通过添加css类来实现它,但我绝对不知道该怎么做.当节点的焦点丢失时,我想删除css类.我是JavaFx的新手.我的代码如下:
public void addSelectionControlToNode(Node node) {
node.addEventFilter(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> {
if (e.isControlDown()) {
if (selection.contains(node)) {
selection.remove(node);
} else {
selection.add(node);
//problematic area below
node.setStyle("-fx-border-width: 2;
-fx-border-color: gray; -fx-border-style: solid;");
//problematic area end
}
} else {
selection.clear();
selection.add(node);
}
System.out.println(selection.size());
});
Run Code Online (Sandbox Code Playgroud)
}
我已经看过很多教程如何在javaFx中使用css,但我不明白如何解决我的问题.
我需要在java中将double转换为boolean。它在我的应用程序中经常发生,它对应用程序的性能具有至关重要的影响。有什么方法可以重写此方法以使其更快?我需要使用双精度数进行操作,因为精度是必要的,但我不保存双精度数,而是只保存布尔值(当数据只能为 0 或 1 时)。代码在这里:
public static double booleanToDouble(boolean b) {
if (b) {
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这不是 XY 问题。50 000 000 行数据的整个应用程序运行需要 3 秒。通过这种转换,时间大约会增加到 5 秒。所以这个转换需要两秒钟,几乎是整个应用程序运行的一半。