【问题标题】:Replace values in a List of Lists from a Map in Java 8从 Java 8 中的 Map 替换列表列表中的值
【发布时间】:2020-03-31 15:07:07
【问题描述】:

我有一个包含所有这些值的地图:

地图:

B Bonus
C Cash
D Draft

我有一个 Lists 列表: Account

Number, Type, Name

帐户列表

Account 0 : 123, B, Sam

Account 1 : 124, C, Harry

我必须根据 Map 中的键值对更新 AccountList 中的值。

我有以下代码:

for (Account acc: AccountList) {
        acc.setAccountType(map.get(acc.getAccountType()));
    }

如何使用 Java 8 流编写上述代码

【问题讨论】:

    标签: java list java-8 hashmap java-stream


    【解决方案1】:

    你可以试试forEach:

    AccountList.stream().forEach(acc -> acc.setAccountType(map.get(acc.getAccountType())))
    

    【讨论】:

      【解决方案2】:

      你可以通过parallelStream做到这一点:

      AccountList = 
          AccountList.
          parallelStream().
          peek(
              acc -> acc.setAccountType(
                         map.get(acc.getAccountType())
                     )
          ).collect(
              Collectors.toList()
          );
      

      【讨论】:

      • 我建议避免这种情况。 Java 的 parallelStream 使用您无法控制的 Common ForkJoin 线程池。该池在您的所有 parallelStream 调用、CompletableFutures 之间共享(如果未提供自定义线程池)。此外,使用并行处理会增加额外的开销和复杂性,以及与 Java 并发模型相关的所有其他问题。长话短说 - 如果您不确定自己是否会从并行处理中受益,请不要这样做。
      【解决方案3】:

      如果您想返回一个新列表而不修改现有列表

       List<AccountList> updatedAccountList = accountLists.stream().map(a -> {
                  AccountList newAccountList = new AccountList();
                  newAccountList.setType(map.get(a.getType()));
                  return newAccountList;
              }).collect(Collectors.toList());
      

      【讨论】:

      • 将创建一个新列表,但此列表中的值将被修改。
      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多