我想知道如何在java编程中处理和管理Tabular数据流。
考虑有一个记录表具有该方案(名称,年龄,邮政编码,疾病),并且记录将被元组及时地作为流读取和处理。我想管理这些流元组,以保存已处理的元组与方案(年龄,邮政编码,疾病)(名称属性应删除)
输入示例..在时间t1读取元组1(汉,25,12548,烟道)
发布元组1 *(25,12548,烟道)
在t2阅读Tuple 2(alex,27,12544,癌症)1。
输出元组2 *(27,12544,癌症)。
..等等,有谁可以帮助我?
答案 0 :(得分:0)
以下是您可以基于最终应用程序的框架的一些建议。
首先,创建表示输入和输出记录的类。为了讨论起见,我们会将它们称为InRecord
和OutRecord
,但您可以为它们提供任何有意义的名称。给他们私有字段来保存必要的数据和公共getter / setter方法来访问数据。
其次,为输入供应商定义接口;我们称之为InputSupplier
进行讨论。它需要提供在处理的开始和结束时调用的设置(open()
)和拆除(close()
)方法的方法,以及返回下一个的getNext()
方法可用InRecord
。您需要决定它如何表明输入结束:要么定义getNext()
将返回null
,如果
没有更多的输入记录,或提供hasNext()
方法来调用,这将返回true
或false
以指示是否有其他输入记录。
第三,为输出消费者(OutputConsumer
)定义一个接口。您希望拥有open()
和close()
方法,以及accept(OutRecord)
方法。
有了这个基础设施,您可以编写处理方法:
public void process(InputSupplier in, OutputConsumer out){
in.open();
out.open();
InRecord inrec;
while ((inrec = in.getNext()) != null){
OutRecord outrec = new OutRecord(in.getAge(), in.getZipCode(), in.getDisease());
out.accept(outrec);
}
out.close();
in.close();
}
最后,写一些" dummy" I / O类,一个实现InputSupplier
,另一个实现OutputConsumer
。出于测试目的,您的输入供应商可以只返回一些手工创建的记录,您的输出消费者可以在控制台上打印您发送的输出记录。
然后您只需要一个main
方法将它们组合在一起:
public static void main(String[] args){
InputSupplier in = new TestInput();// our "dummy" input supplier class
OuputConsumer out = new TestOutput(); // our "dummy" output consumer
process(in, out);
}
对于"真实"申请你写一个真实的"输入供应商类,仍然实现InputSupplier
接口,可以从数据库或Excel文件或任何输入源读取,以及新的输出消费者类,仍在实施OutputConsumer
接口,可以获取输出记录并将其存储为任何适当的格式。 您的处理逻辑不必更改,因为您使用InputSupplier
和OutputConsumer
接口对其进行了编码。现在只需稍微调整main
即可获得最终应用:
public static void main(String[] args){
InputSupplier in = new RealInput();// our "real" input supplier class
OuputConsumer out = new RealOutput(); // our "real" output consumer
process(in, out);
}