将具有两种类型的数组转换为 HashMap、TreeMap、LinkedHashMap
Convert array with two types to HashMap, TreeMap, LinkedHashMap
创建数组:
{int, String}, {String, String}, {int, long}, {String,boolean}, {String, double}, {int, class Car}, {String, class汽车}
转换为HashMap、TreeMap、LinkedHashMap
这是class车:
public class Car implements Comparable{
int id;
String car_name;
String number;
public Car(int id, String car_name, String number) {
this.id = id;
this.car_name = car_name;
this.number = number;
}
@Override
public String toString() {
return "Car{" +
"id='" + id + '\'' +
", car_name='" + car_name + '\'' +
", number='" + number + '\'' +
'}';
}
}
有我的代码:
public class Main {
private static HashMap<Integer,String> toHM(Object[][] a){
HashMap<Integer,String> h = new HashMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
private static HashMap<Integer,String> toLHM(Object[][] a){
HashMap<Integer,String> h = new LinkedHashMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
private static TreeMap<Integer,String> toTM(Object[][] a){
TreeMap<Integer,String> h = new TreeMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
public static void main(String[] args) {
Object[][] a = new Object[2][2];
a[0][0] = 1;
a[0][1] = "test";
a[1][0] = 2;
a[1][1] = "other test";
HashMap<Integer,String> aHM = toHM(a);
HashMap<Integer,String> aLHH = toLHM(a);
TreeMap<Integer,String> aTM = toTM(a);
}
}
这是正确的代码吗?可能,在该代码中必须使用泛型会更好吗?
我明白如何解决这个问题了吗?
- 根据标准,您应该始终针对接口进行编码。我的意思是引用应该是一个接口,对象应该是实现。
- 我看到你在所有三种方法中都有相同的主体,我不能有一个方法 return 是一张地图。您可以添加一个参数并将其分配给引用。
- 调用函数可以捕获所需的 return 类型。
以下是供您参考的伪代码
例如。
调用函数:
HashMap hMap = getMap(Object[][] a, HashMap.class);
方法签名:
private <R> R (Object[][] a,Class<R> responseClazz){
Map mp = new responseClazz();
.....
return mp;
}
检查这个:
@SuppressWarnings("unchecked")
public static <S, T1, T2> S convert(Object[] inputobject, Class<S> mapType,
Class<T1> keyType, Class<T2> valueType)
throws IllegalAccessException, InstantiationException {
Map<T1, T2> map = (Map<T1, T2>) mapType.newInstance();
map.put((T1) inputobject[0], (T2) inputobject[1]);
return (S) map;
}
- inputObject:对象数组
- mapType : 例如地图的 Class。哈希图、树图等
- keyType : Class 键例如。字符串、整数等
- 值类型:Class 的值
示例输入:
Object[] obj = new Object[] { 1, "test" };
System.out.println(convert(obj, HashMap.class, Integer.class, String.class));
示例输出:
{1=test}
我希望这会奏效。
创建数组:
{int, String}, {String, String}, {int, long}, {String,boolean}, {String, double}, {int, class Car}, {String, class汽车}
转换为HashMap、TreeMap、LinkedHashMap
这是class车:
public class Car implements Comparable{
int id;
String car_name;
String number;
public Car(int id, String car_name, String number) {
this.id = id;
this.car_name = car_name;
this.number = number;
}
@Override
public String toString() {
return "Car{" +
"id='" + id + '\'' +
", car_name='" + car_name + '\'' +
", number='" + number + '\'' +
'}';
}
}
有我的代码:
public class Main {
private static HashMap<Integer,String> toHM(Object[][] a){
HashMap<Integer,String> h = new HashMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
private static HashMap<Integer,String> toLHM(Object[][] a){
HashMap<Integer,String> h = new LinkedHashMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
private static TreeMap<Integer,String> toTM(Object[][] a){
TreeMap<Integer,String> h = new TreeMap<>();
for (Object[] o : a){
h.put((Integer) o[0], (String) o[1]);
}
return h;
}
public static void main(String[] args) {
Object[][] a = new Object[2][2];
a[0][0] = 1;
a[0][1] = "test";
a[1][0] = 2;
a[1][1] = "other test";
HashMap<Integer,String> aHM = toHM(a);
HashMap<Integer,String> aLHH = toLHM(a);
TreeMap<Integer,String> aTM = toTM(a);
}
}
这是正确的代码吗?可能,在该代码中必须使用泛型会更好吗? 我明白如何解决这个问题了吗?
- 根据标准,您应该始终针对接口进行编码。我的意思是引用应该是一个接口,对象应该是实现。
- 我看到你在所有三种方法中都有相同的主体,我不能有一个方法 return 是一张地图。您可以添加一个参数并将其分配给引用。
- 调用函数可以捕获所需的 return 类型。
以下是供您参考的伪代码
例如。
调用函数:
HashMap hMap = getMap(Object[][] a, HashMap.class);
方法签名:
private <R> R (Object[][] a,Class<R> responseClazz){
Map mp = new responseClazz();
.....
return mp;
}
检查这个:
@SuppressWarnings("unchecked")
public static <S, T1, T2> S convert(Object[] inputobject, Class<S> mapType,
Class<T1> keyType, Class<T2> valueType)
throws IllegalAccessException, InstantiationException {
Map<T1, T2> map = (Map<T1, T2>) mapType.newInstance();
map.put((T1) inputobject[0], (T2) inputobject[1]);
return (S) map;
}
- inputObject:对象数组
- mapType : 例如地图的 Class。哈希图、树图等
- keyType : Class 键例如。字符串、整数等
- 值类型:Class 的值
示例输入:
Object[] obj = new Object[] { 1, "test" };
System.out.println(convert(obj, HashMap.class, Integer.class, String.class));
示例输出:
{1=test}
我希望这会奏效。