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

Java列表 到地图 转换

文国发
2023-03-14
问题内容

我想转换一个Map <String, Integer>List<String>Java中8是这样的:

Map<String, Integer> namesMap = names.stream().collect(Collectors.toMap(name -> name, 0));

因为我有一个字符串列表,所以我想创建一个Map,键是列表的字符串,值是Integer(零)。

我的目标是计算字符串列表的元素(在我的代码中稍后)。

我知道以“旧”方式进行转换很容易;

Map<String,Integer> namesMap = new HasMap<>();
for(String str: names) {
  map1.put(str, 0);
}

但我想知道是否还有Java 8解决方案。


问题答案:

如前所述,参数Collectors.toMap必须是函数,因此必须更改0name -> 0(可以使用任何其他参数名称代替name)。

但是请注意,如果中存在重复项,此操作将失败names,因为这将导致结果映射中的键重复。要解决此问题,您可以Stream.distinct先通过管道传递流:

Map<String, Integer> namesMap = names.stream().distinct()
                                     .collect(Collectors.toMap(s -> s, s -> 0));

或者根本不初始化这些默认值,而使用getOrDefaultcomputeIfAbsent代替:

int x = namesMap.getOrDefault(someName, 0);
int y = namesMap.computeIfAbsent(someName, s -> 0);

或者,如果您想获取名称的数量,则可以使用Collectors.groupingByCollectors.counting

Map<String, Long> counts = names.stream().collect(
        Collectors.groupingBy(s -> s, Collectors.counting()));


 类似资料:
  • 假设我有一个多映射,如下所示: 第一个步骤是将字符串拆分为一个数组,因为最初它是一个逗号分隔的字符串。然后,我找到任何值中的最大元素数,循环该次数的条目中的所有值,并用结果为每个值创建一个映射。坦率地说,我上周五写了这段代码,但我已经不能正确地阅读它... 所以,一开始这是一件简单的事情,但我最终陷入了混乱,有没有更好的方法来做这件事? 提前谢了。

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

  • 我有一个java map:

  • 问题内容: 最近我谈话有什么将要转换的最佳方式是同事,以在Java中,如果有这样做的任何特殊利益。 我想知道最佳转换方法,如果有人可以指导我,我将不胜感激。 这是个好方法吗? 问题答案: 当然,假设每个Item都有一个返回正确类型的键的方法。

  • 问题内容: 我有一个Map是一个到值列表的映射,但是我需要将其求逆,以便 变成 例如我有 我想看看 除了要遍历映射条目并创建set条目(如果不存在)并添加到列表等之外,Java 8中还有什么更简单的方法可以做到这一点?我一直认为这确实很明显,但我无法解决。 提前致谢 问题答案: 未经测试,但是您可以执行以下操作:

  • 问题内容: 我有一个对象列表,需要将其转换为映射,键是每个元素的函数,值是每个元素的另一个函数的列表。实际上,这是根据元素的功能对元素进行分组。 例如,假设一个简单的元素类: 以及这些的列表: 然后我想要一张地图,如下所示: 任何人都可以提出在Java中 无需进行迭代 的简洁方法吗?LambdaJ的方法与Guava的组合几乎到达了那里,但没有生成地图。 问题答案: 番石榴具有Maps.unique