如何实现此Map< String,List>>结构体 [英] How to achieve this Map<String, List<>> structure
问题描述
我有如下数据:
键值
----- ------
汽车丰田
汽车bmw
汽车本田
水果苹果
水果香蕉
电脑acer
电脑asus
电脑ibm
...
(以上每行数据为对象与字段键和值,全部在一个列表列表< DataObject>
)
我想将数据构造为 Map< String,List< String>
,如下所示:
car:[丰田,bmw,本田]
fruit:[apple,banana]
computer:[acer,asus,ibm]
从数据对象中实现 Map
结构
** * *** 除了 * ** * ** / p>
我更感兴趣在使用纯JDK提供的类或接口来实现结果而不是使用外部库。任何帮助?
我将使用guavas Multimap
实现。但是标准的JDK也是很容易的。
标准JDK示例:
public static void main(String [] args){
扫描仪s =新扫描仪(
car Toyota \+
car bmw\\\
+
汽车本田\+
水果苹果\+
水果香蕉\+
电脑acer\\\
+
computer asus\\\
+
computer ibm);
Map< String,List< String>> map = new LinkedHashMap< String,List< String>>();
while(s.hasNext()){
String key = s.next();
if(!map.containsKey(key))
map.put(key,new LinkedList< String>());
map.get(key).add(s.next());
}
System.out.println(map);
}
示例番石榴:
public static void main(String [] args){
扫描仪s =新扫描仪(
car toyota\\\
+
car bmw\\\
+
汽车本田\\\
水果苹果\
水果香蕉\+
\\ n+
computer asus\\\
+
computer ibm);
Multimap< String,String> map = LinkedListMultimap.create();
while(s.hasNext())
map.put(s.next(),s.next());
System.out.println(map);
}
输出(两个实现) :
{car = [丰田,bmw,本田],水果= [苹果,香蕉],电脑= [acer,asus ,ibm]}
I have data like below:
Key value
----- ------
car toyota
car bmw
car honda
fruit apple
fruit banana
computer acer
computer asus
computer ibm
...
(Each row of above data is an object with fields "key" and "value", all in one List List<DataObject>
)
I would like to construct the data to a Map<String, List<String>>
like following:
"car" : ["toyota", "bmw", "honda"]
"fruit" : ["apple","banana"]
"computer" : ["acer","asus","ibm"]
How to achieve above Map
structure from the data objects?
******Besides******
I am more interested in using pure JDK provided classes or interfaces to achieve the result instead of using external library. Any help?
I would use the guavas Multimap
implementation. But it is easy doable with the standard JDK aswell.
Example standard JDK:
public static void main(String[] args) {
Scanner s = new Scanner(
"car toyota\n" +
"car bmw\n" +
"car honda\n" +
"fruit apple\n" +
"fruit banana\n" +
"computer acer\n" +
"computer asus\n" +
"computer ibm");
Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();
while (s.hasNext()) {
String key = s.next();
if (!map.containsKey(key))
map.put(key, new LinkedList<String>());
map.get(key).add(s.next());
}
System.out.println(map);
}
Example guava:
public static void main(String[] args) {
Scanner s = new Scanner(
"car toyota\n" +
"car bmw\n" +
"car honda\n" +
"fruit apple\n" +
"fruit banana\n" +
"computer acer\n" +
"computer asus\n" +
"computer ibm");
Multimap<String, String> map = LinkedListMultimap.create();
while (s.hasNext())
map.put(s.next(), s.next());
System.out.println(map);
}
Output (both implementations):
{car=[toyota, bmw, honda], fruit=[apple, banana], computer=[acer, asus, ibm]}
这篇关于如何实现此Map< String,List>>结构体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!