想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。
我所拥有的是,
Map<String, String> map = new HashMap<>();
map.put("Shop1", "Product1");
map.put("Shop2", "Product2");
map.put("Shop3", "Product1");
map.put("Shop4", "Product2");
map.put("Shop5", "Product3");
我想要的是,
Map<String, List<String>> result = new HashMap<>();
其中,结果包含,
产品1-
产品2-
这里的Product1在Shop1商店中多次找到
首先找到不同的
值。之后,您可以遍历每个值并在地图上搜索它们的key
,每当您找到key
时,您只需将它们放入列表
。
List<String> list = map.values().stream().distinct().collect(Collectors.toList()); //Collecting the distinct values
for (String value : list) { //iterating through each key
List<String> temp = map.entrySet()
.stream()
.filter(entry -> value.equals(entry.getValue())) //filtering out similar entries
.map(Map.Entry::getKey)
.collect(Collectors.toList());
result.put(value, temp);
}
System.out.println(result);
您可以使用Guava的Multimap来完成此操作。
final Map<String, String> map = new HashMap<>();
map.put("Shop1", "Product1");
map.put("Shop2", "Product2");
map.put("Shop3", "Product1");
map.put("Shop4", "Product2");
map.put("Shop5", "Product3");
final Multimap<String, String> shopToProduct = Multimaps.forMap(map), productToShop = HashMultimap.create();
Multimaps.invertFrom(shopToProduct, productToShop);
// Prints the output you want
productToShop.asMap().entrySet().forEach(System.out::println);
// You can also get the backing map, but ideally use the Multimap abstraction
final Map<String, Collection<String>> backingMap = productToShop.asMap();
您要做的是反转贴图(值变为键,键按旧值分组)。应该有这样的库,但有一个流的示例解决方案:
result = map.entrySet()
.stream()
.filter(e -> Collections.frequency(map.values(), e.getValue()) > 1)
.collect(Collectors.groupingBy(Map.Entry::getValue, Collectors.mapping(Map.Entry::getKey, Collectors.toList())))
假设我们有一个键-值映射的数据结构,其中键本身也是一个键-值映射。例如: 现在,假设我们要查询此映射中与键的某个键值子集匹配的所有顶级键/值。示例: 我们的查询是“给我所有key值,其中key包含,它将返回第一个和第三个值将返回所有同时具有和的键值,生成第二个值。显然,我们可以在每一个查询的完整地图中进行搜索,但我正在寻找比这更高效的方法。 我四处查看了一下,但是找不到一个高效、易用的C解决方案。
我有2个表,即user和user_session。
我在jpa/Hibernate中映射复合键时遇到了问题。父实体和子实体都具有复合主键。 在运行时保存它时会出现以下异常: 我认为这是虚假的,因为有getter和setter。如果在priceRequestLegModel上使用mappedby=“leg”,在allocationModel上使用@mapsid,也会出现同样的错误。有人能指出我在这里做错了什么吗?
卡桑德拉表列: Java实体: 当执行从表列“pickuploc”中选择查询时,并没有完全映射到实体中定义的picupLocal属性。 这是我得到的回应: 使用Spring数据卡桑德拉1.5.8
在这个问题的答案中,用户列出了和12个变体的值(见下文)。这些价值观从何而来?的文档没有在任何地方列出这些信息(我在这里和这里检查过)。这些字符串在Android styles.xml文件的各个地方都列出了,但是这些字符串如何映射回Roboto字体呢? 在android 4.1/4.2中,有以下Roboto字体系列可用: 与此相结合 常规 斜体 粗体 粗体斜体 光线 浅斜体 瘦 斜体 浓缩规则 缩
在我的服务中,我试图将实体映射到,但是由于方法返回(),我不能像通常用于那样进行如下转换。它为方法抛出“不能在'iterable'中解析方法'stream'”错误。 那么,如何将这个实体映射到?