我有以下数组,可以保存许多蓝牙信标的MAC附件及其在建筑物中的位置:
private static final String[][] MAC_ADDRESSES_A_BLUETOOTH = {{"B09122F5D126", "210.105"}, {"B09122F5F26B", "136.121"}, {"B09122F5F619", "181.172"}};
...
private static final String[][] MAC_ADDRESSES_Q_BLUETOOTH = {{"B09122F5D124", "210.105"}, {"B09122F5F26Z", "136.121"}, {"B09122F5F61Q", "181.172"}};然后,我在寻找基于当前三元组的匹配三元组:
private String[][] compareArrays(String[] beacon) {
if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_A_BLUETOOTH))) {
return MAC_ADDRESSES_A_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_B_BLUETOOTH))) {
return MAC_ADDRESSES_B_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_C_BLUETOOTH))) {
return MAC_ADDRESSES_C_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_D_BLUETOOTH))) {
return MAC_ADDRESSES_D_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_F_BLUETOOTH))) {
return MAC_ADDRESSES_F_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_G_BLUETOOTH))) {
return MAC_ADDRESSES_G_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_H_BLUETOOTH))) {
return MAC_ADDRESSES_H_BLUETOOTH;
} else if (Arrays.equals(beacon, getFirstArray(MAC_ADDRESSES_I_BLUETOOTH))) {
return MAC_ADDRESSES_I_BLUETOOTH;
} ...
} else {
return null;
}
}这段代码看上去糟透了,让我心烦。是否有一种无需编写16条if语句的更简单的方法来做到这一点呢?getFirstArray从一个二维数组返回所有的第一个值。
发布于 2019-11-27 17:14:29
为提高可读性,请使用对象而不是2d数组。
例如:
public class BluetoothMacAddress {
private String macAddress;
private float positionInBuilding;
}使用java.util.List,您就可以得到一个列表:
private sttaic final List<MacAddress> MAC_ADDRESSES_A_BLUETOOTH = Arrays.asList(
new BluetoothMacAddress("B09122F5D126", "210.105"),
new BluetoothMacAddress("B09122F5F26B", "136.121"),
new BluetoothMacAddress("B09122F5F619", "181.172"));
private static final List<List<MAC_ADDRESSES>> MAC_ADDRESSES = Arrays.asList(
MAC_ADDRESSES_A_BLUETOOTH,
MAC_ADDRESSES_B_BLUETOOTH
...
);然后,您的新方法将如下所示:
private MacAddress compareArrays(String[] beacon) {
for (List<MacAddress> macAddresses : MAC_ADDRESSES ) {
if (Arrays.equals(beacon, getFirstArray(macAddresses))) {
return macAddresses;
}
}
// not found
return null;
}您必须将beacon参数也更改为MacAddress,或者将MacAddress转换为String[] (或visa-相反)。
https://codereview.stackexchange.com/questions/233077
复制相似问题