for (i in markersArray) {
markersArray[i].setMap(null);
}
работает только с IE.
for (var i=0; i<markersArray.length; i++) {
markersArray[i].setMap(null);
}
работает на chrome, firefox, ie ...
Я предлагаю вам создать новый класс, например, где хранить номер и имя:
class NumberName {
Integer number;
String name;
// constructor, setter, getter
}
Затем при чтении из файла вы помещаете их в список:
[111 ]Тогда сортировка становится легкой:
list.sort(Comparator.comparingInt(NumberName::getNumber)); // by number
list.sort(Comparator.comparing(NumberName::getName)); // by name
list.sort(Comparator.comparing(NumberName::getNumber).thenComparing(NumberName::getName)); // by number then by name
Вы можете изменить свою логику следующим образом:
String currLine;
while ((currLine = r.readLine()) != null) {
if (currLine.trim().length() > 0) {
String[] split = currLine.split(";");
itemArr.add(Integer.parseInt(split[0]));
descArr.add(split[1]);
}
}
Здесь мы разбиваем каждую строку ( currLine ) на основе ;
и сохраняем ее в массив split
. Теперь индекс 0th будет содержать число, а индекс 1st будет содержать строку.
Чтобы добавить его в itemArr
, вам нужно проанализировать его в int
. Также обратите внимание, что если строка пуста, она пропускается. Сортировать это тоже довольно просто.
Вы можете использовать функцию разделения и разделить ее, используя «;» как файл .dat имеет; между почтовым индексом и строкой. Если вы хотите, чтобы почтовый индекс был целым числом, вы можете проанализировать части [0], как показано ниже, чтобы дать вам идею /
FileReader file = new FileReader("C:\\Users\\me\\Desktop\\places.dat");
BufferedReader r = new BufferedReader(file);
String st;
while ((st = br.readLine()) != null) {
String[] parts = st.split[";"]
parts[0] // will have zipcode
parts[1] // will have other part
}
Использование двух списков излишне. Если вы знаете, что каждый почтовый индекс связан с каждой страной, вы должны создать объекты для их хранения, затем поместить эти объекты в список.
public class MyLocation {
private int zipcode;
private String country;
public MyLocation(int zipcode, String country) {
this.zipcode = zipcode;
this.country = country;
}
public int getZipcode() {
return zipcode;
}
public String getCountry() {
return country;
}
}
Кроме того, у вас есть набор данных с разделителями, поэтому вы должны воспользоваться этим! Используйте String.split()
и разделите эту точку с запятой, чтобы получить массив с обоими элементами, готовыми к извлечению.
ArrayList<MyLocation> locations = new ArrayList<>();
try {
FileReader file = new FileReader("C:\\Users\\me\\Desktop\\places.dat");
Bufferedreader r = new BufferedReader(file);
try {
String line;
String[] lineValues;
while ((line = r.readLine()) != null) {
lineValues = line.split(";");
MyLocation location = new MyLocation(Integer.valueOf(lineValues[0]), lineValues[1]);
locations.add(location);
}
} finally {
r.close();
}
} catch (IOException e) {
e.printStackTrace();
}
Кроме того, это хорошая идея, чтобы закрыть ресурс, когда вы закончите, используя его. Я отредактировал свой код, чтобы продемонстрировать один из способов сделать это.
Как уже упоминали другие, если вы хотите сортировать, вам нужно также реализовать Comparable
, но это довольно просто.