我想转换一个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
必须是函数,因此必须更改0
为name -> 0
(可以使用任何其他参数名称代替name
)。
但是请注意,如果中存在重复项,此操作将失败names
,因为这将导致结果映射中的键重复。要解决此问题,您可以Stream.distinct
先通过管道传递流:
Map<String, Integer> namesMap = names.stream().distinct()
.collect(Collectors.toMap(s -> s, s -> 0));
或者根本不初始化这些默认值,而使用getOrDefault
或computeIfAbsent
代替:
int x = namesMap.getOrDefault(someName, 0);
int y = namesMap.computeIfAbsent(someName, s -> 0);
或者,如果您想获取名称的数量,则可以使用Collectors.groupingBy
和Collectors.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