我有几个ArrayList:
ArrayList a - > [“52”,“52”,“52”,“52”,“67”,“67”,“67”,“67”]
ArrayList b - > [“1”,“4”,“5”,“6”,“3”,“4”,“5”,“10”]
我想将它们转换为:
ArrayList at - > [“52”,“52”,“67”,“67”]
ArrayList bt - > [“1”,“4 - 6”,“3 - 5”,“10”]
我知道怎么把b变成bt,但是我不能把我的脑袋包裹起来。
使b成为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;
}
答案 0 :(得分:0)
我有你的方法:
public List<String> groupByValue(List<String> listA) {
if (listA.isEmpty()) {
return Collections.emptyList();
}
final List<String> result = new ArrayList<>();
result.add(listA.get(0));
for (int actualIndex = 1; actualIndex < listA.size(); actualIndex++) {
if (actualIndex + 1 < listA.size() - 1 && !listA.get(actualIndex + 1).equals(listA.get(actualIndex))) {
result.add(listA.get(actualIndex));
actualIndex++;
}
if (actualIndex < listA.size() - 1 && !listA.get(actualIndex - 1).equals(listA.get(actualIndex))) {
result.add(listA.get(actualIndex));
}
if (actualIndex + 1 == listA.size()) {
result.add(listA.get(actualIndex));
}
}
return result;
}
此方法有一个参数,是您的输入列表a。然后,我们chcek列表,接下来,我们从列表中添加第一个值。接下来我们检查下一个值,结果是结果,它表示在列表中。