我创建了一个函数,该函数读取给定的属性文件并返回一个包含信息的映射。这很有用,因为项目有多个文件。然而,1文件特别需要我不仅返回不同类型的映射,而且还需要一个额外的“if”子句。这真的让我很困惑,因为我觉得可能有一种方法可以避免重复所有这些代码
/**
* Loads the given property file and places all it's content in a map
* @param properties
* @param fileDirectory
*/
public static Map<String, String> readProperties(Properties properties, String fileDirectory) {
Map<String, String> propertiesFileContent = new HashMap<>();
try {
properties.load(new FileInputStream(fileDirectory));
} catch (FileNotFoundException e) {
Useful.printTimeStampedMessage(Constants.EXCEPTION_FILE_NOT_FOUND);
e.printStackTrace();
} catch (IOException e) {
Useful.printTimeStampedMessage(Constants.EXCEPTION_IO);
e.printStackTrace();
}
for (String key : properties.stringPropertyNames()) {
propertiesFileContent.put(key, properties.get(key).toString());
}
return propertiesFileContent;
}
/**
* Loads the follow property file and places all it's content in a map
* @param properties
* @param fileDirectory
*/
public static Map<String, LocalDateTime> readFollowProperties(Properties properties, String fileDirectory) {
Map<String, LocalDateTime> propertiesFileContent = new HashMap<>();
try {
properties.load(new FileInputStream(fileDirectory));
} catch (FileNotFoundException e) {
Useful.printTimeStampedMessage(Constants.EXCEPTION_FILE_NOT_FOUND);
e.printStackTrace();
} catch (IOException e) {
Useful.printTimeStampedMessage(Constants.EXCEPTION_IO);
e.printStackTrace();
}
for (String key : properties.stringPropertyNames()) {
if(!properties.get(key).equals("U") && !properties.get(key).equals("FB")) {
propertiesFileContent.put(key, LocalDateTime.parse((CharSequence) properties.get(key)));
}
}
return propertiesFileContent;
}
如您所见,这两个功能之间的差异非常小。
Map更改
您可以编写一个方法,并使其接受布尔值作为参数,如果布尔值为true,第一个版本将运行并返回一个Map
所以你的方法应该返回一个Map
// if you need to return Map<String, LocalDateTime>
// you should pass true
// if you need to return Map<String,String> you should pass false
Map<String, ?> propsLoad(boolean activeStringStringReturn) throws FileNotFoundException, IOException {
Properties prop = new Properties();
prop.load(new FileInputStream("Put your Path here"));
if (activeStringStringReturn== false) {
Map<String, String> mapProp = prop.entrySet().stream()
.collect(Collectors.toMap(e -> (String) e.getKey(), e -> (String) e.getValue()));
return mapProp;
}
else {
Map<String, LocalDateTime> mapProp = prop.entrySet().stream()
.filter(e -> !((String) e.getKey()).equals("U") && !((String) e.getKey()).equals("FB"))
.collect(Collectors.toMap(e -> (String) e.getKey(), e -> LocalDateTime.parse((CharSequence) (e.getValue()) )));
return mapProp;
}
}
在产品代码中,我可以使用以下代码来阅读aws。违约来自
TypeError:无法读取应用程序上未定义的属性“collection”。在图层上发布(/home/niko/Desktop/opa/app.js:17:38)。在route的下一个(/home/niko/Desktop/opa/node_modules/express/lib/router/layer.js:95:5)中处理[as handle_request](/home/niko/Desk
我有一个像这样的JSON文件;{“姓名”:“玛丽亚”,“年龄”:“40”,“住址”:“美国”} 我的基本功能是这样的: 问题是如何从JSON文件提供函数
我尝试使用执行一个箭头函数。为简化起见,具体如下: 按预期运行 嗯...这是怎么回事? 我希望下面的代码将作为传递到。 但是,仍然是未定义的。 如果我将其切换为常规函数定义,则所有函数都会按预期工作。 问题 为什么我不能将的上下文从传递到箭头函数中?
我知道有类似的线程讨论范围问题。 使用以下组件 当您单击时,您会得到的属性'setState' 我知道你可以像这样做,但所有这些看起来都很奇怪,只是为了让它工作。 什么被认为是最优雅的方式来做到这一点?当然,人们必须有一个首选的方式,除了眼睛疼痛之外,还有其他好处?
我试图将axios数据作为道具传递给我的组件B。但是在控制台中我得到了未定义的值。如何解决这个问题。我应该只在测试组件的返回区域内传递道具吗?