我有一个像这样定义的地图:
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));
约束是我只能使用内置类型。我有一个解决方案,之前有一个自定义对象,这使我可以轻松实现这一点,但由于项目设计,我无法创建新的类型。
答案 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);