动手模拟 java Flux

devtools/2024/9/24 23:23:44/
MyFluxTest.java
java">import java.util.ArrayList;
import java.util.List;public class MyFluxTest {public static void main(String[] args) {List<String> names = new ArrayList<>();names.add( "张三" );names.add( "李四" );names.add( "王五" );MyFlux flux_name = MyFlux.fromList(names);MyFlux flux_name1 = flux_name.map(name -> {return name + " 111 ";});MyFlux flux_name2 = flux_name1.map(name -> {return name + " 222 ";});MyFlux flux_name3 = flux_name2.map(name -> {return name + " 333 ";});flux_name3.subscribe( name->{System.out.println( name );} );}
}
MyConsumer.java
java">public interface MyConsumer {void consume( String element );
}
MyFlux.java
java">import lombok.Getter;
import lombok.Setter;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;@Getter
@Setter
public class MyFlux implements Serializable {// 只有初始的那个 flux 的 innerList 才有值,即 prevFlux == null 的那个 fluxprivate List<String> innerList;private MyFlux prevFlux;private MyFlux nextFlux;private MyFunction function; // 是哪个 flux 调用的 map,则传递的 function 就是 谁的 functionprivate MyConsumer consumer;public static MyFlux fromList( List<String> list ) {MyFlux flux_new = new MyFlux();flux_new.innerList = new ArrayList<>();flux_new.setPrevFlux( null );flux_new.setNextFlux( null );for( String element:list ){flux_new.innerList.add( element );}return flux_new;}public MyFlux map(MyFunction function) {if( function == null ){return null;}MyFlux flux_new = new MyFlux();flux_new.setPrevFlux( this );flux_new.setNextFlux( null );flux_new.setFunction( function );this.setNextFlux( flux_new );return flux_new;}public void subscribe(MyConsumer consumer) {List<MyFlux> fluxList = new ArrayList<>();List<String> initInnerList = this.addMeToFluxListAndReturnInitInnerList( fluxList );int size = fluxList.size();int elementCount = initInnerList.size();for (int j = 0; j < elementCount; j++) {String element = initInnerList.get( j );for (int i = size -1; i >=0 ; i--) {MyFlux flux = fluxList.get(i);if( flux.function == null ){continue;}element =  flux.function.apply(element);}consumer.consume( element );}}private List<String> addMeToFluxListAndReturnInitInnerList(List<MyFlux> fluxList) {fluxList.add( this );if( this.prevFlux == null ){return this.innerList;}return this.prevFlux.addMeToFluxListAndReturnInitInnerList( fluxList );}
}
MyFunction.java
java">public interface MyFunction {String apply( String element );
}


http://www.ppmy.cn/devtools/21065.html

相关文章

Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反&#xff0c;可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码&#xff1a; #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …

PHP 错误 Unparenthesized `a ? b : c ? d : e` is not supported

最近在一个新的服务器上测试一些老代码的时候得到了类似上面的错误&#xff1a; [Thu Apr 25 07:37:34.139768 2024] [php:error] [pid 691410] [client 192.168.1.229:57183] PHP Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : …

IM通讯软件开发 MongoDb数据库

数据库名&#xff1a;im 集合&#xff1a; 文档&#xff1a; 消息 txzh_chat: { id: int 表id list_id: string 会话组id user_id: int 用户id content_type: int 0文字/表情 1语音 2图片 3视频 4文件 5红包消息 msg_type: int 消息类型 0用户 1是系统 content: string 会话…

3-成功初始化 Kubernetes 控制平面后如何操作

成功初始化 Kubernetes 控制平面后的一系列指示和建议&#xff0c;用于帮助你开始使用你的 Kubernetes 集群。下面是详细的解释和步骤&#xff1a; kubeadm init --apiserver-advertise-address 172.19.35.202 --image-repository registry.cn-hangzhou.aliyuncs.com/google_c…

小明的勇者之路:挑战极限,战胜未来!

题目 这天蓝桥国王给他安排了 N 个对手&#xff0c;他们的战力值分别为 a1,a2,...,an&#xff0c; 且按顺序阻挡在小明的前方。对于这些对手小 明可以选择挑战&#xff0c;也可以选择避战。 身为高傲的骑士&#xff0c;小明从不走回头路&#xff0c;且只愿意挑战战力值越 来越…

Git--分布式版本控制系统

目录 一、理解分布式版本控制系统二、远程仓库三、克隆远程仓库四、向远程仓库推送五、拉取远程仓库六、配置Git七、给命令配置别名八、创建标签九、操作标签 一、理解分布式版本控制系统 我们⽬前所说的所有内容&#xff08;⼯作区&#xff0c;暂存区&#xff0c;版本库等等&a…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (2) :EEGNet

稳态视觉诱发电位分类学习系列:EEGNet 0. 引言1. 主要贡献2. 提出的方法3. 结果3.1 Compact-CNN 优于 CCA 和 Combined-CCA3.2 Compact-CNN提取窄带频率活动3.3 Compact-CNN揭示了类之间的差异 4. 总结欢迎来稿 论文地址&#xff1a;https://iopscience.iop.org/article/10.108…

【Git系列】rebase的使用场景

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…