将List转换为List的java方法,其中T可以是整数或长
给定一个列表,如何编写方法将其转换为列表,其中T可以是整数或长,但这仅在运行时可用。这是我能想出的代码。它似乎起作用了将List转换为List的java方法,其中T可以是整数或长,java,generics,Java,Generics,给定一个列表,如何编写方法将其转换为列表,其中T可以是整数或长,但这仅在运行时可用。这是我能想出的代码。它似乎起作用了 这样做对吗? 可以进一步简化吗 public static void main(String[] args) { String s = "1, 2, 3, 4"; System.out.println(convertCSVStringToList(s, Integer.class)); System.out.println(convertCSVStrin
这样做对吗? 可以进一步简化吗
public static void main(String[] args) {
String s = "1, 2, 3, 4";
System.out.println(convertCSVStringToList(s, Integer.class));
System.out.println(convertCSVStringToList(s, Long.class));
}
public static <T> List<T> convertCSVStringToList(String s, Class<T> type) {
return Stream.of(s.split(","))
.map(String::trim)
.map(e -> valueOf(e, type))
.collect(Collectors.toList());
}
private static <T> T valueOf(String s, Class<T> type) {
T t = null;
try {
if (type.equals(Integer.class)) {
t = (T) Integer.valueOf(s);
} else if (type.equals(Long.class)) {
t = (T) Long.valueOf(s);
}
} catch (NumberFormatException e) {
System.err.println(String.format("Cannot convert <%s> to type %s", s, type.getSimpleName()));
}
return t;
}
与其提供一个类,不如提供一个函数给convertCSVStringToListmore一般来说,它可以是一个函数而不是提供一个类,不如提供一个函数给convertCSVStringToListmore一般来说,它可以是一个函数而不是传递一个类,这意味着您需要在valueOf方法中分别处理每种情况,您可以传递一个将字符串转换为所需对象的函数
System.out.println(convertCSVStringToList(s, Integer::valueOf));
public static <T> List<T> convertCSVStringToList(String s, Function<String, T> transformer) {
...
.map(String::trim)
.map(transformer)
...
}
您可以传递一个将字符串转换为所需对象的函数,而不是传递一个类(这意味着您需要在valueOf方法中单独处理每种情况)
System.out.println(convertCSVStringToList(s, Integer::valueOf));
public static <T> List<T> convertCSVStringToList(String s, Function<String, T> transformer) {
...
.map(String::trim)
.map(transformer)
...
}
代码是否抛出任何错误?输出是什么?你试过调试它吗?@mtk它能工作。问题更多的是,是否有更好的方法,这是正确的方法吗?基于泛型方法中的类型的if/else链通常表明它不是正确的方法。在本例中,您的代码还将生成安全的未经检查的强制转换警告;但这是编译器说我放弃的一个标志,你要计算出这是否正确。代码是否抛出任何错误?输出是什么?你试过调试它吗?@mtk它能工作。问题更多的是,是否有更好的方法,这是正确的方法吗?基于泛型方法中的类型的if/else链通常表明它不是正确的方法。在本例中,您的代码还将生成安全的未经检查的强制转换警告;但这是编译器说我放弃的一个信号,你要知道这是否正确。NumberFormatException呢?在OP的代码中,它映射为null。NumberFormatException呢?在OP的代码中,它映射为null。
System.out.println(convertCSVStringToList(s, Integer::valueOf));
System.out.println(convertCSVStringToList(s, Integer::valueOf));
public static <T> List<T> convertCSVStringToList(String s, Function<String, T> transformer) {
...
.map(String::trim)
.map(transformer)
...
}