我想替换我从请求中获得的输入中的一些值。但首先让我解释一下这里的场景,我有一个像下面这样的 pojo,它将在 primaryColumn Map 中保存主列名称及其值,columns Map 保存所有其他列名称及其值,metaData 保存列元数据。
class TableData{
private String tableName;
private Map<String,Object> primaryColumn;
private Map<String,Object> columns;
private Map<String,Object> metaData;
//Setters and getters
}
还有一个像下面这样的类,它包含 TableData 的列表。
class TableDataList{
private List<TableData> dataList;
//Setters and getters
}
我的输入将如下所示
dataList:[TableData(tableName=Random,primaryColumn={Y=26-07-2021},columns={X=26-07-2022,XYZ=paris},metaData={Y=DATE,X=DATE,XYZ= VARCHAR2}),TableData(tableName=Code,primaryColumn={Z=Seconds},columns={V=26-07-2021,ABC=Person,H=26-07-2022},metaData={Z=VARCHAR2,V=DATE,ABC=VARCHAR2,H=DATE}),...]
参考表看起来像这样
随机表
Y | X | XYZ |
---|---|---|
26-07-2021 | 26-07-2022 | 巴黎 |
代码表
Z | V | ABC | H |
---|---|---|---|
秒 | 26-07-2021 | 人物 | 26-07-2022 |
所以在这个例子中,TableDataList 类将保存 TableData 的列表(其中包含 tableName、primaryColumn、columns、metaData)。
我想流过 TableDataList 并从列表中获取每个索引并执行一些如下检查
- 首先我们应该检查元数据映射,它是否有任何日期值。如果是
- 从元数据映射中获取以 DATE 作为值的键,并使用该键在主列和列映射中进行搜索。如果 primaryColumn 或 columns Map 包含该键,则
- 将该键的值替换为 28-08-2021 或我们提供的任何其他日期。
我编写了没有流的代码,如下所示,但我想使用 JAVA8 实现相同的效果
List<TableData> modified = new ArrayList<>();
for(TableData data: dataList) {
for(String key: data.getMetaData().keySet();) {
if(data.getMetaData().get(key).equals("DATE")
&& data.getcolumns().containsKey(key)){
data.getcolumns().replace(key,"28-08-2021");
} else if(data.getMetaData().get(key).equals("DATE")
&& data.getPrimaryColumn().containsKey(key)){
data.getPrimaryColumn().replace(key,"28-08-2021");
}
}
modified.add(data);
}