如何实现此Map< String,List>>结构体 [英] How to achieve this Map<String, List<>> structure

查看:193
本文介绍了如何实现此Map< String,List>>结构体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有如下数据:

 键值
----- ------
汽车丰田
汽车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&lt; String,List&gt;&gt;结构体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆