如何在java中组合两个不同的映射?[英] How to combine two different Map in java?

问题描述

我关注了很多这样的链接合并两个地图,但仍然无法解决问题.

我有两张地图 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 细节的最终地图.

我该怎么做?

以下是示例数据.唯一的问题是两者都是地图列表,如何迭代另一个?

{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 查询,如果

  1. 如果 CreatedDate + 30 天 > Sysdate 然后显示具有 true 的列 ---> In Trail
  2. 如果 CreatedDate + 30 天
  3. Sysdate 然后显示列有 false ---> Out of Trail Period
<块引用>

"select cust.acc_num,third.parent_acc_id,cust.crte_dt,cust.updated_dt,cust.crte_user_id from CUST_ACCT cust,ThirdParty_third 第三个"+ "其中 cust.updated_dt 为空且 cust.CRTE_DT < sysdate "+ "和 cust.acc_num = third.third_code 和 is_actv = ? union "+ "从 CUST_ACCT cust 中选择 cust.acc_num、third.parent_acc_id、cust.crte_dt、cust.updated_dt、cust.crte_user_id、ThirdParty_third 第三个"+"其中(cust.updated_dt 不为空且 cust.updated_dt

推荐答案

假设您的列表仅包含两个映射,并且它们都是可变的.您可以做的是将第二个映射的所有映射添加到第一个映射当且仅当第二个映射的映射 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());

本文地址:https://www.itbaoku.cn/post/978664.html