我有一张地图清单。
List<Map<Integer, String>>
列表中的值例如是
<1, String1>
<2, String2>
<1, String3>
<2, String4>
最后,我想要一个Map>,就像
<1, <String1, String3>>
<2, <String2, String4>>
如何在Java中实现这一目标。
代码:
List<Map<Integer, String>> genericList = new ArrayList<Map<Integer,String>>();
for(TrackActivity activity : activityMajor){
Map<Integer, String> mapIdResponse = activity.getMapIdResponse();
genericList.add(mapIdResponse);
}
现在,基于与我想要的相同ID,此genericList是该列表的输入并来自此列表
Map<Integer, List<String>> mapIdResponseList
基本上,要根据ID将响应归类为String,将具有相同ID的响应分组在列表中,然后创建一个以ID为键并以列表为值的新映射。
您可以使用Java 8进行以下操作:
private void init() {
List<Map<Integer, String>> mapList = new ArrayList<>();
Map<Integer, String> map1 = new HashMap<>();
map1.put(1, "String1");
mapList.add(map1);
Map<Integer, String> map2 = new HashMap<>();
map2.put(2, "String2");
mapList.add(map2);
Map<Integer, String> map3 = new HashMap<>();
map3.put(1, "String3");
mapList.add(map3);
Map<Integer, String> map4 = new HashMap<>();
map4.put(2, "String4");
mapList.add(map4);
Map<Integer, List<String>> response = mapList.stream()
.flatMap(map -> map.entrySet().stream())
.collect(
Collectors.groupingBy(
Map.Entry::getKey,
Collectors.mapping(
Map.Entry::getValue,
Collectors.toList()
)
)
);
response.forEach((i, l) -> {
System.out.println("Integer: " + i + " / List: " + l);
});
}
这将打印:
整数:1 /列表:[String1,String3]
整数:2 /列表:[ String2 ,String4]
说明(非常有必要),恐怕我无法解释每个细节,您需要首先了解Java 8中引入的Stream
和Collectors
API 的基础:
Stream<Map<Integer, String>>
从中获取mapList
。应用flatMap
运算符,该运算符将流大致映射到现有流中。
在这里:我将全部转换Map<Integer, String>
为Stream<Map.Entry<Integer, String>>
并将它们添加到现有流,因此现在它也是type Stream<Map.Entry<Integer, String>>
。
我打算将收集Stream<Map.Entry<Integer, String>>
到Map<Integer, List<String>>
。
Collectors.groupingBy
,这产生一个Map<K, List<V>>
基于一个分组功能,Function
其映射Map.Entry<Integer, String>
到Integer
在这种情况下。Map.Entry::getKey
对a进行操作Map.Entry
并返回Integer
。Map<Integer, List<Map.Entry<Integer, String>>>
如果不做任何额外的处理,这时我将拥有一个。Collectors.groupingBy
提供一个收集器。Map.Entry
条目映射到它们的String
值Map.Entry::getValue
。Collectors.toList()
这里,因为我想将它们添加到列表中。Map<Integer, List,String>>
。问题内容: 我有一张地图,其中“值”是项目列表: 我想从地图中提取项目,但仅提取1个项目列表: 我已经看到了答案,但它们不适用于我的情况。我不想要这个结果: 我想要的结果是: 如何使用JAVA 8 Streams实现此目的?谢谢。莱昂纳多。 问题答案: 感谢@Holger的回答。 在值映射中的Collection为Null的情况下避免NullPointerException的代码:
我有一个模型,其中包含一个内部字段
问题内容: 我想要一些排序方法: 鉴于GDK的工作方式,我希望能够做类似的事情: 但我没有在文档中看到任何内容…我缺少什么吗?还是我太懒了? 问题答案: 最近,我遇到了需要完全做到这一点的需求:将列表转换为地图。这个问题是在Groovy版本1.7.9发布之前发布的,因此该方法尚不存在。它与建议的方法完全相同 如果由于某种原因你坚持使用旧的Groovy版本,该方法也可以用这是一个经过稍微修改的版本,
使用亿景智图,您可以生成自己的业务地图,并在线共享和发布这些地图,比如,客户分布图、配送路线图、布局规划图等等。生成一幅地图,基本流程是这样的:新建地图->添加图层->绘制对象(支持批量添加及使用已有数据)->发布地图。这里,为大家介绍,如何构建自定义地图: ● 新建地图 ● 上传Excel/CSV数据 ● 快速添加行政区划 ● 手动绘制地图 ● 搜索添加标注 ● 设置地图名称 ● 设定地图默认视
问题内容: 我没有找到这样的多图构造…当我想这样做时,我遍历了地图,并填充了多图。还有其他方法吗? 第一个结果是,但我希望 问题答案: 假设你有 那我相信这是最好的 或更佳,但更难阅读
是否可以使用Google API为网站创建一个与此完全相同的地图: https://www.google.pl/maps/place/Googleplex/@37.422,-122.0840835,19z/data=!4m2!3m1!1s0x808fba02425dad8f: 0x6c296c66619367e0 所以我想要的是将地点ID传递给API,以获得一个像Googleplex这样的地方,我