如何实现这个地图 (How to achieve this Map> struct

2019-07-29 18:35发布

我有一个像下面的数据:

 Key       value
-----      ------
car         toyota
car         bmw
car         honda

fruit       apple
fruit       banana

computer    acer
computer    asus
computer    ibm 
...

(上述数据中的每一行与字段“键”和“值”的对象 ,都在一个列表List<DataObject>

我想数据构造的Map<String, List<String>>类似以下内容:

 "car"      : ["toyota", "bmw", "honda"]
 "fruit"    : ["apple","banana"]
 "computer" : ["acer","asus","ibm"]

如何实现上述Map从数据对象的结构?

** * *** 除了 * ** * **

我更感兴趣的是使用纯JDK提供的类或接口来实现的结果,而不是使用外部库。 任何帮助吗?

Answer 1:

    Map<String, List<String>> myMaps = new HashMap<String, List<String>>();
    for (DataObject item : myList) {
        if (!myMaps.containsKey(item.getKey())) {
            myMaps.put(item.getKey(), new ArrayList<String>());
        }
        myMaps.get(item.getKey()).add(item.getValue());
    }


Answer 2:

我会用番石榴Multimap实施。 但它很容易与标准的JDK藏汉可行的。

例如标准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);
}

例如番石榴:

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);
}

输出(两种实现):

{car=[toyota, bmw, honda], fruit=[apple, banana], computer=[acer, asus, ibm]}


Answer 3:

以下代码段会帮助你。

        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

        ArrayList<String> carList = new ArrayList<String>();
        carList.add("toyota");
        carList.add("bmw");
        carList.add("honda");

        map.put("car", carList);

        ArrayList<String> fruitList = new ArrayList<String>();
        fruitList .add("apple");
        fruitList .add("banana");

        map.put("fruit", fruitList );


Answer 4:

遍历对象。 对于每个对象,您可以通过地图的相应列表。 如果为null,创建一个新的列表,并把它在地图上。 然后将值添加到列表中。

或使用番石榴的ListMultimap ,它会为你做这个。



Answer 5:

Map<String, List<String>> data = new HashMap<String, List<String>>();
data.put("car", Arrays.asList("toyota", "bmw", "honda"));
data.put("fruit", Arrays.asList("apple","banana"));
data.put("computer", Arrays.asList("acer","asus","ibm"));


Answer 6:

像这样的事情吧?

Map<String, List<String>> dataMap = new HashMap<String, List<String>>();

伪代码:

for (String key : keys) {
    if (!dataMap.containsKey(key)) {
        dataMap.put(key, new ArrayList<String>());
    }

    dataMap.get(key).add(getValue(key));
}

或者,使用番石榴ListMultiMap



文章来源: How to achieve this Map> structure [closed]