У меня есть пара ArrayList:Преобразования два ArrayList
ArrayList а -> [ "52", "52", "52", "52", "67", "67", «67», «67»]
ArrayList b -> ["1", "4", "5", "6", "3", "4", "5", "10"]
Я хочу, чтобы превратить их в:
ArrayList в -> [ "52", "52", "67", "67"]
ArrayList Ь -> [ "1" , "4 - 6", "3 - 5", "1 0 "]
Я знаю, как сделать b в bt, но я не могу обмотать голову, чтобы вставить в.
Алгоритм Построения для изготовления б в BT:
public static void main(String[] args) {
ArrayList<String> alist = new ArrayList<String>();
alist.add("1");
alist.add("4");
alist.add("5");
alist.add("6");
alist.add("3");
alist.add("4");
alist.add("5");
alist.add("10");
alist = groupByRange(alist);
}
static public ArrayList<String> groupByRange(ArrayList<String> alist) {
// ArrayList<String> to ArrayList<Integer>
/////////////////////////////////////////////////////////
ArrayList<Integer> alist_int = new ArrayList<Integer>();
for (String ident : alist) {
alist_int.add(Integer.parseInt(ident));
}
// ArrayList<Integer> to int[]
/////////////////////////////////////////////////////////
int[] arr = new int[alist_int.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = alist_int.get(i);
}
// Grouping by range (return ArrayList<String>)
/////////////////////////////////////////////////////////
int start, end;
end = start = arr[0];
ArrayList<String> alist_res = new ArrayList<String>();
for (int i = 1; i < arr.length; i++) {
if (arr[i] == (arr[i - 1] + 1)) {
end = arr[i];
} else {
if (start == end) {
alist_res.add(String.valueOf(start));
} else {
alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
}
start = end = arr[i];
}
}
if (start == end) {
alist_res.add(String.valueOf(start));
} else {
alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
}
for (String n : alist_res) {
System.out.println(n);
}
return alist_res;
}
Дело в том, что для того, чтобы закодировать что-либо, вам сначала нужно ** ясности ** о ваших требованиях. Например: каково правило, которое говорит вам, что (52,52,52,52) следует уменьшить до (52,52)? Правило ли правило: только два раза один и тот же номер подряд? Или: уменьшить дубликаты только до двух случаев? Я имею в виду: сначала нужно ** четко указать ** правила ** для ваших преобразований. И тогда вы начинаете думать о «как». Внедрение неясных правил может привести только к путанице и нищете. – GhostCat
Тогда, пожалуйста, ИЗМЕНИТЕ вопрос; не начинайте вкладывать вещи в комментарии! – GhostCat
Я надеялся, что это было ясно в моем примере, но вы правы. Я попытаюсь объяснить: 52 ассоциируется с 1, 4, 5 и 6; то же, что и 67, связано с 3, 4, 5 и 10. Вот почему мне нужно (52) -> (1), (52) -> (4-6), (67) -> (3- 5) и (67) -> (10) –