当前位置: 首页 > 知识库问答 >
问题:

使用流,如何映射HashMap中的值?

顾恺
2023-03-14
Map<String, String> byNameMap = new HashMap<>();

for (Map.Entry<String, Person> person : people.entrySet()) {
    byNameMap.put(person.getKey(), person.getValue().getName());
}

我看不出如何在函数式中做到这一点:map/hashmap不实现stream

people.entrySet()返回一个 > ,我可以对其进行流式传输,但如何将新的entry 添加到目标映射?

共有1个答案

傅和璧
2023-03-14

通过Java8,您可以:

Map<String, String> byNameMap = new HashMap<>();
people.forEach((k, v) -> byNameMap.put(k, v.getName());

但是使用Guava的Maps.TransformValues会更好,它包装原始的Map并在执行Get时执行转换,这意味着您只在实际使用值时支付转换成本。

使用番石榴看起来是这样的:

Map<String, String> byNameMap = Maps.transformValues(people, Person::getName);
Map<String, String> byNameMap = people.entrySet()
  .stream()
  .collect(Collectors.toMap(Map.Entry::getKey, (entry) -> entry.getValue().getName());
 类似资料:
  • 问题内容: 给定一个Person上具有(etc)方法的where,我该如何将其转换为通过调用获得的where ? 我会使用Java 8之前的版本 但我想使用流和lambda做到这一点。 我看不到如何以功能样式执行此操作:Map / HashMap不实现。 返回可以流式传输的,但是如何向目的地地图添加新的内容? 问题答案: 使用Java 8,您可以执行以下操作: 尽管使用Guava的Maps.tra

  • 我想要一个流的等价物: 这段代码实际上并不编译,因为0不能分配给类型T,但您明白了。

  • 我有一张地图 我想从键列表中获取值,如拥有键列表,即键名称列表。 我知道一个方法 但是,我想将此列表本身传递到流API中,而不是循环,这将过滤匹配的值和返回列表。这是可能的! !提前致谢。

  • 我有这些学生物品清单, 我想从这些学生列表对象生成哈希图。 hashmap包含sudentid和name list键值对。

  • 我有一个我搜索的对象,该对象存储在一个流中。我想让用户能够修改现有流中的元素,并用修改后的元素更新现有列表,而不是创建一个新的列表。这个问题与这个问题相似,只是用户正在将修改后的元素添加到一个新的列表中 项目类别

  • 我有以下代码: 如果我想迭代Map,上面的代码工作得很好。但是现在我有这样的东西。 我想在映射中遍历映射,并获取它的键和值。我想得到key1、value1、key2、value2、key3、value3的值,依此类推。那我该怎么做呢?