我跟踪了许多这样的链接Merging two Maps,但仍无法解决问题。

我有两个地图List<Map<String, Object>>-此地图包含acc_num, parent_acc_num, crte_dt, rnwl_dt, userid等,其他地图包含acc_numisActive(这是从第一张地图开始的改进)。

我想创建/合并这两个地图,并创建包含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());

09-10 07:59
查看更多