java - 将程序集合操作转换为 java 流或反应流
问题描述
如何使用 Flux 和 Mono 将这种“旧式”程序 java 代码转换为至少 java 8 流或反应流。我的目标是为在并发非阻塞 Web 环境中使用该代码打下良好的基础。
我想Elem
在整个系统中拥有恒定数量的元素,同时places
这些元素的可用数量更少或更多。
从视觉上看,它可能看起来像 8 个元素、12 个位置和 3 个对象(每个对象都包含自己的Elem
s 列表):
s1 [Elem(1), Elem(2), Elem(3), Elem(4)]
s2 [Elem(5), Elem(6), Elem(7), Elem(8)]
s3[FREE, FREE, FREE, FREE]
呼叫 s1requestElem()
呼叫 s1requestElem()
呼叫 s2requestElem()
s1 [Elem(1), Elem(2), FREE, FREE]
s2 [Elem(5), Elem(6), Elem(7), FREE]
s3[FREE, FREE, FREE, FREE]
...目前这三个元素正在等待以随机顺序返回...
呼叫 s3returnElem(4)
呼叫 s3returnElem(8)
呼叫 s3returnElem(2)
s1 [Elem(1), Elem(2), FREE, FREE]
s2 [Elem(5), Elem(6), Elem(7), FREE]
s3[Elem(4), Elem(8), Elem(3), FREE]
当然,这些操作的顺序可能不同并且是随机选择的。
class MyClass {
private String name;
private final int size = 4; // size of s1, s2, s3
private BlockingDeque<Elem> places;
private int numOfElem;
private BlockingDeque<Elem> additionalElems;
public void requestElem() {
if (numOfElem > size) {
numOfElem--;
additionalElems.pop();
return;
}
if(!places.isEmpty()){
places.pop();
numOfElem = places.size();
} else {
System.out.println("empty: " + name + ", waiting for new elements...");
}
}
public void returnElem(int id) {
if (numOfElem >= size) {
numOfElem++;
additionalElems.push(new Elem(id));
return;
}
if(places.size() < size){
places.push(new Elem(id));
numOfBicycles = places.size();
}
}
}
这可能吗?你能给我一些有用的提示或资源吗?
解决方案
推荐阅读
- jquery - AngularJS 拆分器示例
- slurm - 排队 SLURM 作业以在 X 分钟后运行
- javascript - 使用 Vue.js 在 Laravel 中上传多张图片
- c# - 带有 asp.net Core Identity 的 Microsoft Identity Pltaform
- nexus - 有没有办法停止更新 Nexus 中的组存储库
- php -
标签不会在谷歌浏览器中显示
- here-api - 如何使用 Routing API 使用 rollup 和 cost_optimize 参数计算成本优化路由?
- deep-learning - 如何在 Tensorflow 2/keras 自定义层中使用基于 numpy 的外部库函数?
- c# - 检查传递给 `AttributeUsageAttribute` 构造函数的参数
- javascript - 一种可靠的国际化方法如何能够将一个或多个单词从一种语言映射到另一种语言?