我跟踪了许多这样的链接Merging two Maps,但仍无法解决问题。
我有两个地图List<Map<String, Object>>
-此地图包含acc_num, parent_acc_num, crte_dt, rnwl_dt, userid
等,其他地图包含acc_num
和isActive
(这是从第一张地图开始的改进)。
我想创建/合并这两个地图,并创建包含acc_num, parent_acc_num, crte_dt, rnwl_dt, userid
+ isActive
详细信息的最终地图。
我怎样才能做到这一点 ?
以下是示例数据。唯一的问题都是Map列表,如何在另一个列表之间进行迭代?
{CRTE_DT=2017-06-22, USER_ID=ABC, ACC_NUM=9449, RNWL_DT=2017-06-22, PARENT_ACC_NO=9449}
{ACC_NUM=9449, IS_ACTIVE=false}
另一个查询:
如果以下工作可行,则可能无需进行计算
我有以下使用12c的Oracle查询,我需要一种方法来检查查询本身是否
如果CreatedDate + 30 days> Sysdate,则显示具有true的列---> In Trail
如果CreatedDate + 30 days 超出跟踪时间
“从CUST_ACCT客户中,从ThirdParty_third第三中选择cust.acc_num,third.parent_acc_id,cust.crte_dt,cust.updated_dt,cust.crte_user_id”
+“其中cust.updated_dt为空,而cust.CRTE_DT +“ and cust.acc_num = third.third_code and is_actv =?union”
+“从CUST_ACCT cust,ThirdParty_third第三中选择cust.acc_num,third.parent_acc_id,cust.crte_dt,cust.updated_dt,cust.crte_user_id。
+“其中(cust.updated_dt不为null,而cust.updated_dt +“ and cust.acc_num = third.third_code and is_actv =?”;
最佳答案
假设您的列表仅包含两个地图,并且它们都是可变的。您可以做的是,当且仅当第二个映射的映射ACC_NUM
等于第一个映射时,才将第二个映射的所有映射添加到第一个映射。
final List<Map<String, Object>> maps = ...;
if (Optional.ofNullable(map.get(1).get("ACC_NUM")).filter(acc_num -> acc_num.equals(map.get(0).get("ACC_NUM"))).isPresent())
{
map.get(0).putAll(map.get(1));
}
编辑
final List<Map<String, Object>> l1 = ...;
final List<Map<String, Object>> l2 = ...;
final List<Map<String, Object>> result = l1.stream()
.map(map ->
{
final Map<String, Object> r = new HashMap<>(map);
l2.stream()
.filter(map2 -> Objects.equals(map.get("ACC_NUM"), map2.get("ACC_NUM")))
.findFirst()
.map(map2 -> map2.get("IS_ACTIVE"))
.ifPresent(is_active -> map.put("IS_ACTIVE", is_active));
return r;
})
.collect(Collectors.toList());