用Java中的几个键创建Map

时间:2018-11-22 10:26:50

标签: java

我想创建这样的地图:

Map<int, String, String> map = new ArrayList<>();

map.(100, "SystemError", "General error");

您能推荐一些可以存储多个值的适当Java集合吗?

4 个答案:

答案 0 :(得分:2)

最好创建自己的课程

class Error {
    private int id;
    private String logString;
    private String description;
    // plus getters and setters
}

,然后输入List<Error>。如果需要地图,可以通过

创建
Map<Integer, List<Error>> errorMap = errorList.stream().collect(groupingBy(Error::getId));

答案 1 :(得分:1)

看看Apache Commons MultiValuedMap。它可以为单个键存储多个值。

MultiValuedMap<Integer, String> map = new MultiValuedHashMap<>();
map.put(1, "A");
map.put(1, "B");
map.put(1, "C");
Collection<String> coll = map.get(1);

coll将包含值“ A”,“ B”和“ C”。

Java EE还定义了他自己的替代方案:MultivaluedMap,这似乎与Apache的替代方案非常相似(据我所知,几乎相同)。

答案 2 :(得分:1)

Map<Integer, Collection<String>> errorMap = new HashMap<>();
errorMap.put(100, Arrays.asList("System error", "General error"));

Collection<String> errorNames = errorMap.get(100);

答案 3 :(得分:0)

这取决于您的用例,有三个可能的答案:

  • 如果您的示例仅使用一个键和多个值(我认为您提供的示例就是这种情况),则可以使用开箱即用的东西,例如Apache MultiValueMap使用ArrayList作为值的Java Map的装饰器。
  • 如果您需要灵活性来使用多个键或多个值,则可以使用Eclipse Collections Tuple将多个元素配对在一起,并将它们作为单个键/值插入。
  • 如果不需要在代码中添加任何外部库,则可以通过委派或用ArrayList装饰Map来保存多个键/值来完成Apache Commons的工作。