当前位置: 首页 > 面试题库 >

在Java 8中如何转换地图 到另一张地图 使用lambda?

宋宏儒
2023-03-14
问题内容

我刚刚开始研究Java
8,并尝试了lambda,我认为我想尝试重写最近写的一件非常简单的东西。我需要将字符串映射到列映射转换为另一个字符串映射到列映射,其中新映射中的列是第一个映射中列的防御性副本。列具有复制构造函数。到目前为止,我最接近的是:

    Map<String, Column> newColumnMap= new HashMap<>();
    originalColumnMap.entrySet().stream().forEach(x -> newColumnMap.put(x.getKey(), new Column(x.getValue())));

但我敢肯定,必须有更好的方法来完成这项工作,对于您的建议我将不胜感激。


问题答案:

您可以使用收集器:

import java.util.*;
import java.util.stream.Collectors;

public class Defensive {

  public static void main(String[] args) {
    Map<String, Column> original = new HashMap<>();
    original.put("foo", new Column());
    original.put("bar", new Column());

    Map<String, Column> copy = original.entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey,
                                  e -> new Column(e.getValue())));

    System.out.println(original);
    System.out.println(copy);
  }

  static class Column {
    public Column() {}
    public Column(Column c) {}
  }
}


 类似资料:
  • 问题内容: 我需要将Java转换为的实例(包括地图内容) 我应该怎么做才能使此代码可编译? 问题答案: 从Collectors.toMap(…)javadoc: 例如:

  • 问题内容: 如何转换 为? 这不起作用: 问题答案: 如果您只包含,则可以这样操作: 如果不是,则可以替换 为。

  • 如何将此地图/平面图转换为便于理解的图形,请解释其工作原理,谢谢。

  • 我正在尝试创建一个简单的解析util,它转换一个两列CSV文件并将其放入一个映射。 如您所见,我正在创建一个字符串流,用逗号分隔每一行,并将其转换为字符串数组,最后将键映射到索引0,将值映射到索引1。 出于某种原因,当我运行这个测试时,实际值为null。我排除了无效的文件路径,因为它在另一个单元测试中运行良好,并且键值出现在CSV中。我已经盯着它看了几个小时了,我想也许有人能指出我的错误。 此外,

  • 问题内容: 我有一个的关键无非是像“123”等我得到的数值,因为这个数值是从UI在我的JSF组件来数值。我不想更改UI组件的合同。 现在,我想基于上面创建一个,我在类中看到了一些方法,但是所有方法都集中在转换值而不是键上。 有没有更好的转换方法? 问题答案: Java 8的更新 您可以使用流来执行此操作: 假定所有键都是s的有效字符串表示形式。另外,转换时可能会发生冲突;例如,与两个地图。 我认为

  • 问题内容: 我需要转换为。我已经为这个问题苦苦挣扎了一段时间。 很明显如何转换为: 但是我找不到解决最初的问题。有一些易于使用的Java-8方法吗? 问题答案: 我想您很亲密,您需要将这些条目添加到a 并从那里收集。我使用了已经存在的,但是您也可以使用某种。 好吧,如果您不想增加这些实例的额外开销,则可以做些不同: