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

Java-8流:将list转换为map

璩慎之
2023-03-14

我有一个标签类,它包含一个项目列表

class Tag {

private String tagName
private List<String> items

}

我有一个标签列表,其中每个标签都有一个项目列表

List<Tag> tagList =   [
                       {"tagName": "popular", "items": ["Item1","Item2","Item3","Item4"]},
                       {"tagName": "expensive" , "items":  ["Item2","Item4","Item5"]},
                       {"tagName": "mostwanted", "items":  ["Item1","Item2","Item5"]}
                      ]

我想把它转换成一个映射,其中的项目是key,而tagName是值。

预期产出:

{
    "Item1" : ["popular","mostwanted"],
    "Item2" : ["popular","expensive","mostwanted"],
    "Item3" : ["popular","mostwanted"],
    "Item4" : ["popular","expensive"],
    "Item5" : ["expensive","mostwanted"]
}

我尝试了Stream/FaltMap/GroupingBy的各种组合,但没有得到预期的输出。你能帮帮我吗。谢谢

共有1个答案

鄢禄
2023-03-14

下面是使用java-8中的新特性(如Map::ComputeIfPresentMap::ComputeIfEstent)的过程方法,但不使用Java流:

Map<String, List<String>> map = new HashMap<>();
    tagList.forEach(tag -> {
        String tagName = tag.getTagName();
        tag.getItems().forEach(item -> {
            map.computeIfPresent(item, (k, v) -> { v.add(tagName); return v; });
            map.computeIfAbsent(item, k -> new ArrayList<>(Arrays.asList(tagName)));
   });
});

map.forEach((k, v) -> System.out.println(k + " " + v));

如果要将这些项从项1排序为项5,请使用不同的实现:

Map<String, List<String>> map = new TreeMap<>();

此外,只要item3只出现一次,您的预期输出就不匹配:

Item1 [popular, mostwanted]
Item2 [popular, expensive, mostwanted]
Item3 [popular]
Item4 [popular, expensive]
Item5 [expensive, mostwanted]
 类似资料:
  • 问题内容: 在Java 8流API中,调用任何对象都会返回一个包含所有字符的对象。 将返回的对象转换回a 的正确方法是什么?调用会给我一个,任何构造函数都不接受。 问题答案: 您可以使用,然后使用构造函数。正如返回UTF-16代码单元所指定的那样,这并不完全令人满意,基本上是: 返回此序列的int零扩展char值的流。映射到代理代码点的任何字符都将通过未解释传递。 使用反而会更加保持与此构造,其预

  • 问题内容: 我创建了一种计算字母数字的方法。我正在学习流(函数式编程)并尝试尽可能多地使用它们,但是在这种情况下,我不知道该怎么做: 那么,如何使用Java 8流重写它呢? 问题答案: 避免使用有状态的索引计数器,如其他答案中所述的基于-解决方案。如果流是并行的,它们将失败。相反,流式传输索引: 上面假设传入列表是字母,因此不应包含重复的字符。如果您有可能重复元素,则多个元素将映射到同一键,然后需

  • 将Java 8转换为数组的最简单/最快捷的方法是什么?

  • 本文向大家介绍Java 将Map映射转换为 List,包括了Java 将Map映射转换为 List的使用技巧和注意事项,需要的朋友参考一下 首先,让我们创建一个Java Map并初始化- 现在,将Map转换为List- 示例 以下是在Java中将Maps转换为List的程序- 输出结果

  • 我有列表: 如何转换列表 需要更换: 对象具有构造函数: 我试过这个: 但这对我不起作用。我得到错误: 我认为lambda参数是数组的点[],但不是。

  • 我有我想分批处理的编号列表。