我想要一个带有多个列表的Map,每个列表都由Comparable对象组成,但并不总是相同的,因此可能会有ListDoublesListStrings等等。
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]

10-02 05:44