Talend 在globalMap中构造列表并将其作为流检索

Talend 在globalMap中构造列表并将其作为流检索,talend,Talend,我有3个级别的文件夹,我使用它们如下: tFileList_1 --iterate--> tFileList_2 --iterate--> tFileList_3 --> tJava ... tJava在它之后有多个分支 基于用tJava编写的某些条件(如上所示)以及其他tJava(如上所示,但存在于多个分支中),我想收集满足特定条件的文件列表 所以,我想把它们放到globalMap上,如下所示: Initialise: List<String> filesMet

我有3个级别的文件夹,我使用它们如下:

tFileList_1 --iterate--> tFileList_2 --iterate--> tFileList_3 --> tJava ...
tJava在它之后有多个分支

基于用tJava编写的某些条件(如上所示)以及其他tJava(如上所示,但存在于多个分支中),我想收集满足特定条件的文件列表

所以,我想把它们放到globalMap上,如下所示:

Initialise:
List<String> filesMetCondition = new ArrayList<String>();  
globalMap.put("filesMetCondition", filesMetCondition);

Putting into array: (from multiple places)
((List<String>)globalMap.get("filesMetCondition")).add("file2");
初始化:
List filesMetCondition=new ArrayList();
globalMap.put(“fileMetCondition”,fileMetCondition);
放入阵列:(从多个位置)
((List)globalMap.get(“filemetcondition”)).add(“file2”);
填充globalMap应该不是问题

我的问题是如何作为流访问此globalMap。我应该能够使用tHashOutput或tFixedFlow或tForEach之类的东西链接到上面的globalMap变量,这样我就可以将组件连接到它。

您可以使用
tLoop
来迭代存储在globalMap中的ArrayList

然后可以使用访问当前值

String value = 
     ((List<String>)globalMap.get("filesMetCondition")).
          get(((Integer)globalMap.get("tLoop_1_CURRENT_VALUE")));

System.out.println(value);
字符串值=
((列表)globalMap.get(“fileMetCondition”))。
get(((整数)globalMap.get(“tLoop\u 1\u CURRENT\u VALUE”));
系统输出打印项次(值);
要在流中使用该值,请添加一个
tIterateToFlow


您可以使用
tLoop
迭代存储在globalMap中的ArrayList

然后可以使用访问当前值

String value = 
     ((List<String>)globalMap.get("filesMetCondition")).
          get(((Integer)globalMap.get("tLoop_1_CURRENT_VALUE")));

System.out.println(value);
字符串值=
((列表)globalMap.get(“fileMetCondition”))。
get(((整数)globalMap.get(“tLoop\u 1\u CURRENT\u VALUE”));
系统输出打印项次(值);
要在流中使用该值,请添加一个
tIterateToFlow


是否同时从多个位置将值写入globalMap?它是写同步的,因此您可能会丢失数据。通过这种方式,上下文更好。考虑使用一个例程,因为它与作业无关,所以多个作业可以看到它,并且可以有良好的访问器,如MyStudio.AdfFile()MyStudio。GETFrase:Filter(filter)。还可以看看tJavaFlex,它允许您为这个场景中的每个循环创建自己的循环,尽管它正在从多个位置写入globalMap,但它仍然在单线程上,所以这不是一个问题。我喜欢您使用例程和getter/setter方法的想法。您是否同时从多个位置向globalMap写入值?它是写同步的,因此您可能会丢失数据。通过这种方式,上下文更好。考虑使用一个例程,因为它与作业无关,所以多个作业可以看到它,并且可以有良好的访问器,如MyStudio.AdfFile()MyStudio。GETFrase:Filter(filter)。还可以看看tJavaFlex,它允许您为这个场景中的每个循环创建自己的循环,尽管它正在从多个位置写入globalMap,但它仍然在单线程上,所以这不是一个问题。我喜欢你使用例程和getter/setter方法的想法。