Mel*_*lon 11 java multimap data-structures multi-mapping
我有如下数据:
 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提供的类或接口来实现结果,而不是使用外部库.有帮助吗?
小智 13
    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());
    }
我会使用guavas Multimap实现.但是使用标准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]}
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"));
以下代码段将为您提供帮助.
        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 );