java 数据变形

原始数据:
key1, val1
key1, val2
key2, val3
key2, val4
key3, val5

想变形为:
key1 => [val1, val2]
key2 => [val3, val4]
key3 => [val5]

该怎么写?

阅读 2.7k
4 个回答
  1. Java8 stream 流式处理

list<T> list;
list.stream.collect(Collectors.groupingBy(T::getKey1))

  1. 遍历循环

原来是一个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就好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题