Java HashMap与列表关联的一个键

Java HashMap与列表关联的一个键,java,list,collections,hashmap,Java,List,Collections,Hashmap,我有一个包含表的行数据的对象列表。该表中有多个列,但我认为这不是问题。我需要应用的逻辑只需要两列。这两列称为化学名称和批号。有趣的是,一种化学物质在特定批号下会发生多次。比如说, 化学品|批次|其他列 美国广播公司 A---------100------温室气体 A---------100------GHL 现在我需要的是批号及其相关行。我意识到最好的方法是HashMap,其中K是批号,V是列表。现在我不知道如何将键分配给包含行对象的列表 我希望如此,但我不能在数据库级别这样做,因此这是毫无疑问

我有一个包含表的行数据的对象列表。该表中有多个列,但我认为这不是问题。我需要应用的逻辑只需要两列。这两列称为化学名称和批号。有趣的是,一种化学物质在特定批号下会发生多次。比如说,

化学品|批次|其他列 美国广播公司 A---------100------温室气体 A---------100------GHL 现在我需要的是批号及其相关行。我意识到最好的方法是HashMap,其中K是批号,V是列表。现在我不知道如何将键分配给包含行对象的列表

我希望如此,但我不能在数据库级别这样做,因此这是毫无疑问的。

您可以使用
Map
存储针对给定键的内容列表

如果您想获得更多乐趣,可以使用以下实现:

Map<String, List<String>> map = new HashMap<String, List<String>>() {

    public List<String> get(Object key) {
        List<String> list = super.get(key);
        if (list == null) { 
            list = new ArrayList<String>();
            put(key, list);
        }
        return list;
    }

}

如果发现客户的这种代码模式
get()
方法非常方便

您可以使用
Map
根据给定的键存储内容列表

如果您想获得更多乐趣,可以使用以下实现:

Map<String, List<String>> map = new HashMap<String, List<String>>() {

    public List<String> get(Object key) {
        List<String> list = super.get(key);
        if (list == null) { 
            list = new ArrayList<String>();
            put(key, list);
        }
        return list;
    }

}


如果发现客户的这种代码模式
get()
方法非常方便

创建一个
对象来保存您的值,然后将
列表
添加到地图中:

Map<String, List<Row>> map = new HashMap<String, List<Row>>();
List<Row> list = new ArrayList<Row>();
list.add(new Row(...));
list.add(new Row(...));
map.put("someKey", list);
Map Map=newhashmap();
列表=新的ArrayList();
添加(新行(…);
添加(新行(…);
map.put(“someKey”,list);
如果需要在循环中执行此操作,请使用以下方法:

Map Map=newhashmap();
用于(行当前行:行){
String key=currentRow.getKey();
列表行=map.get(键);
if(行==null){
行=新的ArrayList();
}
行。添加(currentRow);
map.put(键,行);
}

创建一个
对象来保存您的值,然后向地图添加一个
列表

Map<String, List<Row>> map = new HashMap<String, List<Row>>();
List<Row> list = new ArrayList<Row>();
list.add(new Row(...));
list.add(new Row(...));
map.put("someKey", list);
Map Map=newhashmap();
列表=新的ArrayList();
添加(新行(…);
添加(新行(…);
map.put(“someKey”,list);
如果需要在循环中执行此操作,请使用以下方法:

Map Map=newhashmap();
用于(行当前行:行){
String key=currentRow.getKey();
列表行=map.get(键);
if(行==null){
行=新的ArrayList();
}
行。添加(currentRow);
map.put(键,行);
}

或者您可以使用番石榴库。有一个类(技术上的接口)可以满足您的需要:一个键映射到多个值

您可以首先在列表中获取所有
对象,然后使用
Multimaps.index
方法创建一个
Multimap
实例。是一个util类,它提供了许多方法来创建
Multimap
实例

您的代码可能如下所示:

List<Row> rows = ... // all the row objects.
Multimap<String, Row> rowsMap = Multimaps.index(rows, new Function<Row, String>() {
    @Override
    public String apply(Row row) {
        return row.getRowKey(); // assume that getRowKey() return the key of one row.
    }
});
列出行=…//所有行对象。
Multimap rowsMap=Multimaps.index(行,新函数(){
@凌驾
公共字符串应用(行){
return row.getRowKey();//假设getRowKey()返回一行的键。
}
});

查看guava api的更多详细信息。

或者您可以使用guava库。有一个类(技术上的接口)可以满足您的需要:一个键映射到多个值

您可以首先在列表中获取所有
对象,然后使用
Multimaps.index
方法创建一个
Multimap
实例。是一个util类,它提供了许多方法来创建
Multimap
实例

您的代码可能如下所示:

List<Row> rows = ... // all the row objects.
Multimap<String, Row> rowsMap = Multimaps.index(rows, new Function<Row, String>() {
    @Override
    public String apply(Row row) {
        return row.getRowKey(); // assume that getRowKey() return the key of one row.
    }
});
列出行=…//所有行对象。
Multimap rowsMap=Multimaps.index(行,新函数(){
@凌驾
公共字符串应用(行){
return row.getRowKey();//假设getRowKey()返回一行的键。
}
});

请参阅guava api的更多详细信息。

尝试了Apache Collections中的MultiMap,效果良好。但非常感谢大家,谢谢这里的每一个人。尝试了Apache Collections中的MultiMap,效果很好。但是非常感谢,伙计,谢谢这里的每一个人。