我有一个标签类,它包含一个项目列表
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的各种组合,但没有得到预期的输出。你能帮帮我吗。谢谢
下面是使用java-8中的新特性(如Map::ComputeIfPresent
和Map::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参数是数组的点[],但不是。
我有我想分批处理的编号列表。