As several people have said, you probably don't want to do that.
But: if you do want to do it, as an exercise in Java object wrapping, with complete disregard for efficiency and good programming practice, here's a way that stays as close as possible to what you wrote in the question.
import java.util.*;
public class CrazySort {
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[] {"name1","10","name2","2","name3","15","name4","7"});
crazySort(list);
System.out.println(list);
}
private static class StringPair implements Comparable<StringPair> {
String s1, s2;
StringPair(String p1, String p2) { s1 = p1; s2 = p2; }
public int compareTo(StringPair o) { return Integer.parseInt(o.s2) - Integer.parseInt(s2); }
}
static void crazySort(final List<String> list) {
List<StringPair> wrapper = new AbstractList<StringPair>() {
public StringPair get(int i) { return new StringPair(list.get(i*2), list.get(i*2+1)); }
public StringPair set(int i, StringPair p) {
StringPair r = get(i);
list.set(i*2, p.s1);
list.set(i*2+1, p.s2);
return r;
}
public int size() { return list.size() / 2; }
};
Collections.sort(wrapper);
}
}