原始数据:
key1, val1
key1, val2
key2, val3
key2, val4
key3, val5
想变形为:
key1 => [val1, val2]
key2 => [val3, val4]
key3 => [val5]
该怎么写?
原始数据:
key1, val1
key1, val2
key2, val3
key2, val4
key3, val5
想变形为:
key1 => [val1, val2]
key2 => [val3, val4]
key3 => [val5]
该怎么写?
原来是一个key对应一个value,现在是改为一个key改为一个value集合,即key的类型改变了。
那么,如果value是相同类型,可以key的类型可以用集合,如果类型不同,可以用自定义class来表示。
举个栗子:原来可能是hashmap(int,int)
后面改为hashmap(int,List)或者hashmap(int,yourclass)。
题设:
存在数据结构:
class Data {
Integer key;
String value;
}
List<Data> dataList = new List<>();
现需将存储结构变换为Map<Integer, List<String>>
方法如下:
方法1:Java8-Stream写法
Map<Integer, List<String>> result = dataList.stream()
.collect(Collectors.groupingBy(Data::getKey,
Collectors.mapping(Data::getValue, Collectors.toList())));
方法2:普通循环法
Map<Integer, List<String>> result = new HashMap<>();
for(Data data : dataList) {
List<String> l = result.computeIfAbsent(data.getKey(), ArrayList::new);
l.add(data.getValue);
}
任君选用,望采纳,谢谢!
一个萝卜一个坑,可以把全部的key存入一个hash列表里面存为key而value则存一个list。然后使用遍历的方式遍历每个数据,假如key在hash列表里面有,则将数据存入对应key1的list列表中。
假如你最后是想导出对应key的数组,直接list.toArray就好了。
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
list<T> list;
list.stream.collect(Collectors.groupingBy(T::getKey1))