我有很多if
语句,我想避免它们。
我尝试使用HashMap,但不适用于数据类型。请查看下面的代码。这只是第一个if
语句,但是我还有更多...
字段是一个数据类型
if (field.equals(DataTypes.IntegerType)) {
x = Integer.valueOf();
}
[...]
else if (field instanceof org.apache.spark.sql.types.TimestampType) {
try {
x = Timestamp.valueOf();
} catch (Exception) {
try {
columns[i] = Timestamp.valueOf(...).toLocalDateTime());
} catch (Exception) {
throw new ParseException("...");
}
}
[...]
else {
x = null
}
我可以以某种方式避免使用其他许多
if
语句吗? 最佳答案
您可以保留转化的静态地图:
private static final Map<DataType, Function<String, ?>> stringConverters;
static {
Map<DataType, Function<String, ?>> map = new EnumMap<>(DataType.class);
map.put(DataType.IntegerType, Integer::valueOf);
map.put(DataType.LongType, Long::valueOf);
map.put(DataType.DoubleType, Double::valueOf);
map.put(DataType.FloatType, Float::valueOf);
map.put(DataType.StringType, Function.identity());
map.put(DataType.BinaryType, Binary::fromString);
if (!map.keySet().containsAll(EnumSet.allOf(DataType.class))) {
throw new RuntimeException(
"Programming error: Not all DataType values accounted for.");
}
stringConverters = Collections.unmodifiableMap(map);
}
// ...
columns[i] = stringConverters.get(field).apply(s);
containsAll
检查对于确保您不会忽略任何DataType值很有用。关于java - 避免许多if语句-不同的数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57907104/