我想要一个带有多个列表的Map
,每个列表都由Comparable
对象组成,但并不总是相同的,因此可能会有List
的Doubles
和List
的Strings
等等。Map<String, List<Comparable<?>>>
不幸的是,由于无法比较每个Map
中的元素,因此上面定义的List
不会有用。因此,我不得不作弊并向类引入类型参数:
class MyClass<T extends Comparable<? super T>> {
Map<String, List<T>> myMap;
}
这不是完全正确的,因为并非所有列表都属于同一类型。但这是可行的,当我将
T
添加到双精度列表或将Double
添加到字符串列表时,我唯一要做的就是将类型转换为String
。我确保每种类型仅添加到正确类型的列表中。有解决这个问题的更好方法吗?
另一种方法是为每种
Map
类型使用一个List
。但这只会使代码更丑陋,而我对列表所做的唯一事情就是对它们进行排序,并将它们作为String值插入到DB中,因此我只在可比对象上调用toString
。 最佳答案
您可以使用List<Object>
使其具有通用性并达到此目的。
您可能要对列表中的某些特定数据类型进行instance of
检查。
Map<String, List<Object>> map = new HashMap<>();
List<Object> list;
list = new ArrayList<>(Arrays.asList(new Object[] { 1, 2, 3.45, "dev", 'A', true, false }));
map.put("key1", list);
list = new ArrayList<>(Arrays.asList(new Object[] { false, 100, 5.1234f, "user", 'Z', true }));
map.put("key2", list);
for (Map.Entry<String, List<Object>> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
输出:
key1 => [1, 2, 3.45, dev, A, true, false]key2 => [false, 100, 5.1234, user, Z, true]