我有一个带有对象的arrayList(Dados,Dados是什么并不重要),每个对象都有一个ID。对象IDS,它们可以是随机的,但有一点总是正确的,它们处于“从低到高”的顺序(不懂英文单词,对不起)。
假设我有以下ArrayList:
[1] [3] [5] [9] [10] [12] [15] [16] [17] [18] [20] [25] [28] [29]
我想将顺序对象IDS组合在一起,以后将它们放在TreeMap上。 通过上面的示例,TreeMap将是:
1->[1]
2->[3]
3->[5]
4->[9][10]
5->[12]
6->[15][16][17][18]
7->[20]
8->[25]
9->[28][29]
我现在正在这样做的方式是跳过数组的第一个和最后一个元素: 这就是我正在做的事情:
for(int i = 1; i<arrayWithData.size()-1; i++)//arrayWithData is the initial array with all the objects in it that I need to process
{
ArrayList<Dados> final_sequence = new ArrayList<>(); //the array with the list of Dados
int current = arrayWithData.get(i).getId();
int previous = arrayWithData.get(i-1).getId();
int next = arrayWithData.get(i+1).getId();
/*
* Group Dados, sequencial Dados go together
*/
if(current == next-1)
{
initial_sequence.add(arrayWithData.get(i));
}
else if(current == previous+1)
{
final_sequence.addAll(initial_sequence);
initial_sequence.clear();
final_sequence.add(arrayWithData.get(i));
tmap.put(tmap_key, final_sequence); //tmap is the TreeMap
tmap_key++;
}
else //if it is not a sequencial value
{
final_sequence.add(arrayWithData.get(i));
tmap.put(tmap_key, final_sequence);
tmap_key++;
}
}
但我无法跳过数组中的第一个和最后一个位置,而这个细节让我无法修复此算法。
答案 0 :(得分:3)
当ID中存在间隙时,是否只能遍历列表并添加到树形图中?
List<Dados> next = new ArrayList<Dados>();
for(Dados d : arrayWithData) {
if(!next.isEmpty() && next.get(next.size() - 1).getId() != d.getId() - 1) {
tmap.put(tmap_key++, next);
next = new ArrayList<Dados>();
}
next.add(d);
}
if(!next.isEmpty()) {
tmap.put(tmap_key++, next);
}