嵌套地图结构

时间:2014-11-27 18:12:21

标签: java collections map

我有一个像这样定义的地图:

Map<Long, Long> foo = new TreeMap<Long, Long>();

对于地图中的每个条目,我还想将这些条目映射到Boolean。我怎样才能做到这一点?这是我到目前为止所尝试的但看起来并不正确。我想要实现的是,mask中的每个条目都应该有一个相应的Boolean值。

Map<Long, Boolean> mask = new HashMap<Long, Boolean>();
SortedMap<Long, Map<Long, Boolean>> pairs =  new TreeMap<Long, Map<Long, Boolean>>();

mask.put(new Long(2), Boolean.FALSE);
mask.put(new Long(3), Boolean.FALSE);
mask.put(new Long(3), Boolean.FALSE);

pairs.put(new Long(1), new Long(2));
pairs.put(new Long(1), new Long(3));
pairs.put(new Long(2), new Long(3));

约束是我只能使用内置类型。我有一个解决方案,之前有一个自定义对象,这使我可以轻松实现这一点,但由于项目设计,我无法创建新的类型。

4 个答案:

答案 0 :(得分:3)

创建一个封装两个值的类并创建一个映射:

class Pair {
    public final boolean booleanValue;
    public final long longValue;

    public Pair(boolean booleanValue, long longValue) {
        this.booleanValue = booleanValue;
        this.longValue = longValue;
    }
}

Map<Long,Pair> map = new HashMap<>();

map.put(1L, new Pair(false, 123));
map.put(2L, new Pair(true,  456));
map.put(3L, new Pair(false, 789));

或者使用两张具有相同键的地图:

Map<Long,Boolean> map1 = new HashMap<>();
Map<Long,Long>    map2 = new HashMap<>();

map1.put(1L, false); map2.put(1L, 123L);
map1.put(2L,  true); map2.put(2L, 456L);
map1.put(3L, false); map2.put(3L, 789L);

答案 1 :(得分:1)

如果我理解你,你想要将Long和Boolean都映射到同一个键条目吗?

如果是这种情况,并且您无法创建自己的自定义对象,则只需要有两张地图:

Map<Long, Long> pairs = new HashMap<Long, Long>();
Map<Long, Boolean> mask = new HashMap<Long, Boolean>();

然后只使用相同的密钥条目:

pairs.put(1L, 5L);
mask.put(1L, false);

pairs.put(2L, 20L);
mask.put(2L, true);

等等。

答案 2 :(得分:0)

创建一个具有Long和Boolean的新对象,并将该对象放入地图中。

答案 3 :(得分:0)

持有人怎么样?

private class MyHolder
{
    public Boolean boolValue;
    public Long longValue;
}

Map<Long, MyHolder> myMap = new HashMap<Long, MyHolder>();

MyHolder h = new MyHolder();
h.boolValue = true;
h.longValue = 1L;
myMap.put(1L, h);