Когда вы выполняете итерацию, вы знаете, что сначала у вас наименьшее значение. Поэтому я бы сделал что-то вроде этого:
Integer first = null;
for(Integer i : map.keySet()) {
if(first == null) first = i; // save the first value
builder.append(i - first);
}
Используя ваш пример:
import java.util.TreeMap;
class Eggonlegs {
public static void main(String[] args) {
TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(14152,"First");
map.put(14153,"Second");
map.put(14159,"Third");
Integer first = null;
for(Integer i : map.keySet()) {
if(first == null) first = i; // save the first value
System.out.println(i - first);
}
}
}
Результаты в
c:\files>javac Eggonlegs.java
c:\files>java Eggonlegs
0
1
7
c:\files>
Теперь, возможно, это не то, что вы хотели. Возможно, вам нужна разница между каждым узлом, а не то, что показывает ваш пример. В этом случае я бы использовал библиотеку коллекций следующим образом:
List<Integer> list = new ArrayList<Integer>(map.keySet());
for(int i = 0; i < list.size(); i++) {
if(i == 0) builder.append(0);
else builder.append(list.get(i) - list.get(i-1));
}
Вот пример этого, если это то, что Ою на самом деле намеревался:
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
class Eggonlegs {
public static void main(String[] args) {
TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(14152,"First");
map.put(14153,"Second");
map.put(14159,"Third");
List<Integer> list = new ArrayList<Integer>(map.keySet());
for(int i = 0; i < list.size(); i++) {
if(i == 0) System.out.println(0);
else System.out.println(list.get(i) - list.get(i-1));
}
}
}
Результаты в
c:\files>javac Eggonlegs.java
c:\files>java Eggonlegs
0
1
6
c:\files>