If you use a TreeSet, I have a (longish) one-liner for you (assuming items
is the TreeSet):
final String[] arr =
items.toString() // string representation
.replaceAll("\\D+", " ") // replace all non digits with spaces
.trim() // trim ends
.split(" "); // split by spaces
Test code:
Set<Integer> items = new TreeSet<Integer>(Arrays.asList(5, 1, 2, 11, 3));
// insert above code here
System.out.println(Arrays.toString(arr));
Output:
[1, 2, 3, 5, 11]
EDIT:
OK, here is a different version that works with the int array directly. But unfortunately it's not a one-liner. However, it does keep duplicates and it's probably faster
EDIT again:
Bug fixed and negative numbers supported, as requested:
EDIT once more: only one regex pass and no trim
final int[] in = { 5, 1, 2, 11, 3, 2, -5 }; // with duplicate
Arrays.sort(in);
final String[] out =
Arrays.toString(in)
.replaceAll("(?:\\[?)([-\\d]+)(?:\\]?)", "$1") // just remove [ and ]
.split("\\s*,\\s*"); // split by comma
System.out.println(Arrays.toString(out));
Output:
[-5, 1, 2, 2, 3, 5, 11]
Or completely without regex (apart from split()), but with one more step added:
final int[] in = { 5, 1, 2, 11, 3, 2, -5 }; // with duplicate
Arrays.sort(in);
final String stringRep = Arrays.toString(in);
final String[] out =
stringRep.substring(1, stringRep.length() - 1).split("\\s*,\\s*");
System.out.println(Arrays.toString(out));
Output:
[-5, 1, 2, 2, 3, 5, 11]
Update: stripped whitespace from my last two solutions, hope you're happy now :-)