【发布时间】:2018-11-06 00:43:32
【问题描述】:
我有一个将在云应用服务器上运行的小型 java 类,因此它需要尽可能快地执行。
我需要做的是遍历List<Map>,获取当前Map 的内容,然后对其进行一些逻辑处理。 Map 包含字符串和双精度数。
这是我当前的实现:
for (int i = 0; i < count; i++) {
Map data = result.get(i);
double priceToCheck = Double.parseDouble(data.get("value").toString());
String criteria = data.get("criteria").toString();
String coin = data.get("coin").toString();
if (coin.equals("BTC")) {
if (criteria.equals("above")) {
if (BTC > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (BTC < priceToCheck) {
// create notification
sendNotification = true;
}
}
} else if (coin.equals("BCH")) {
if (criteria.equals("above")) {
if (BCH > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (BCH < priceToCheck) {
// create notification
sendNotification = true;
}
}
} else if (coin.equals("ETH")) {
if (criteria.equals("above")) {
if (ETH > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (ETH < priceToCheck) {
// create notification
sendNotification = true;
}
}
} else if (coin.equals("ETC")) {
if (criteria.equals("above")) {
if (ETC > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (ETC < priceToCheck) {
// create notification
sendNotification = true;
}
}
} else if (coin.equals("LTC")) {
if (criteria.equals("above")) {
if (LTC > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (LTC < priceToCheck) {
// create notification
sendNotification = true;
}
}
} else if (coin.equals("XRP")) {
if (criteria.equals("above")) {
if (XRP > priceToCheck) {
// create notficaition
sendNotification = true;
}
} else {
if (XRP < priceToCheck) {
// create notification
sendNotification = true;
}
}
}
result 是 List<Map>,"BTC" 是字符串,BTC 是双精度数
您可以看到最高级别的 if 语句检查字符串 coin,有六个可能的值。找到coin 后,我确定criteria 的值,然后根据criteria 的值比较双精度数
我觉得这是一种完成这项任务的非常繁琐的方式,它确实有效,但速度相对较慢。如果不直接访问每个Map 元素并手动检查内容,我想不出一种方法来加快速度。
还有其他人有什么想法吗?
【问题讨论】:
-
创建一个硬币列表,其中每个硬币都有一个名称和价值。那么内部的 if 块可以折叠成一个循环,覆盖硬币列表。此外,您似乎只设置了一个值“sendNotification”。当你第一次发现这是真的时,你可以打破所有的循环。
-
@jtahlborn 谢谢。我无法跳出循环,因为“结果” List
-
您是否需要地图列表?您会处理可能包含相同密钥的多个地图吗?例如硬币的名称?恕我直言,您似乎只想要一个要使用地图填充的 POJO 列表。
-
@shinjw 一个 Map 列表是当我使用它的 API 访问它的数据库时从云服务器返回的内容
标签: java arrays if-statement optimization