我是java新手,还在学习阶段。 我有一个结构
Map<Long, Map<String, Data>> mapData
Data
有 2 个字段 time
和distance
和 Map
有一个时间是 Long
场和map
与 Identifier
和Data
结构如下所示
{190001919 = {[1= [data1], 2=[data2], 3=[data3]},
190001920={[1=[data4], 2=[data5], 3=[data6]},
1900019121= {[1=[data7], 2=[data8], 3=[data9]}}
然后将其转换为 map - Map<String,List<Data>> mpData
和
idenifier
如key
和values
因为标识符的值是相同的。
喜欢
{1= [data1,data4,data7], 2= [data2,data5,data8],3= [data3,data6,data9]}
有人可以帮我吗? 更新: 通过下面的代码,我得到
{1= [data7,data7,data7], 2= [data8,data8,data8],3= [data9,data9,data9]}
而不是
{1= [data1,data4,data7], 2= [data2,data5,data8],3= [data3,data6,data9]}
代码:
public static Map<Long, Map<String, Data>> listData;
public static Map<String, List<Data>> mapData;
public convertMapData(Map<Long, Map<String, Data>> array) {
listData = new HashMap();
listData = array;
mapData = new HashMap<>();
Iterator it = listData.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Long, Map<String, Data>> pairs = (Map.Entry) it
.next();
Long keyValue = pairs.getKey();
Map inter = pairs.getValue();
Iterator it2 = inter.entrySet().iterator();
while (it2.hasNext()) {
Map.Entry<String, Data> pairs_2 = (Map.Entry) it2
.next();
String identifierK = pairs_2.getKey();
Data resultV = pairs_2.getValue();
if (!(mapData.containsKey(identifierK))) {
mapData.put(identifierK, new ArrayList<Data>());
}
mapData.get(identifierK).add(resultV);
}
}
}
最佳答案
- 定义
Map<String,List<Data>> listData = new HashMap<String, List<Data>>();
- 迭代
mapData
的值(看来您没有使用该 map 的键)。 - 对于
mapData
的每个值,这又是一张 map ,迭代entrySet
,它为您提供每个条目的键(String
,我们称之为K
)和值(一个 Data 对象,我们称之为V
)。 - 检查您的
listData
已经有像K
这样的 key (使用containsKey()
),如果没有,则添加一个,使用listData.put(K, new ArrayList<Data>())
- 添加
V
到为 key 存储的列表:listData.get(K).add(V)
仅此而已。正如 Rohit Jain 评论的那样,您不需要 listData map 周围的列表。
试试这个:
public Map<String, List<Data>> convert(Map<Long, Map<String, Data>> array) {
Map<String, List<Data>> result = new HashMap<String, List<Data>>();
for (Map<String, Data> inter : array.values()) {
for (Map.Entry<String, Data> entry : inter.entrySet()) {
String k = entry.getKey();
String v = entry.getValue();
if (!result.containsKey(k)) {
result.put(k, new ArrayList<Data>());
}
result.get(k).add(v);
}
}
return result;
}
关于Java:根据内部映射对Map进行排序,Map<Long,Map<String, Data>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954767/