Emi*_*mil 21
int[] nums = {5,1,2,11,3}; //List or Vector
Arrays.sort(nums); //Collections.sort() for List,Vector
String a=Arrays.toString(nums); //toString the List or Vector
String ar[]=a.substring(1,a.length()-1).split(", ");
System.out.println(Arrays.toString(ar));
Run Code Online (Sandbox Code Playgroud)
更新:
更短的版本:
int[] nums = {-5,1,2,11,3};
Arrays.sort(nums);
String[] a=Arrays.toString(nums).split("[\\[\\]]")[1].split(", ");
System.out.println(Arrays.toString(a));
Run Code Online (Sandbox Code Playgroud)
Sky*_*ave 12
使用StreamJava 8中提供的内容.要获取Stream包含"list"的实例:
int[]
IntStream intStream = Arrays.Stream(nums); 要么Stream<Integer> intStream = Arrays.Stream(nums).boxed(); 如果你需要与底层相同的课程.Collection<Integer>接口的类(例如Vector<Integer>,List<Integer>)
Stream<Integer> intStream = nums.stream();最后,得到一个String[]:
String[] answer = intStream.sorted().mapToObj(String::valueOf).toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)
我可以使用while循环吗?
@Test
public void test() {
int[] nums = {5,1,2,11,3};
Arrays.sort(nums);
String[] stringNums = new String[nums.length];
int i = 0;
while (i < nums.length) {
stringNums[i] = String.valueOf(nums[i++]);
}
Assert.assertArrayEquals(new String[]{"1","2","3","5","11"}, stringNums);
}
Run Code Online (Sandbox Code Playgroud)
使用JUnit断言.
对不起,我很轻浮.但是说你不能使用for循环是愚蠢的 - 你必须以某种方式迭代列表.如果您打算调用库方法为您排序(cf Collections.sort()) - 那将以某种方式循环元素.
使用Guava的简单解决方案:
public List<String> toSortedStrings(List<Integer> ints) {
Collections.sort(ints);
return Lists.newArrayList(Iterables.transform(ints,
Functions.toStringFunction()));
}
Run Code Online (Sandbox Code Playgroud)
显然,这个解决方案(与其他任何解决方案一样)将在内部使用循环,但它会从您必须阅读的代码中获取它.您还可以ints通过传递结果而不是先使用结果Ordering.natural().sortedCopy(ints)来避免更改顺序.此外,如果您不需要能够将新元素添加到结果列表中,则不需要该部件.transformCollections.sortLists.newArrayList
该方法体的缩短版本,带有静态导入:
return transform(Ordering.natural().sortedCopy(ints), toStringFunction());
Run Code Online (Sandbox Code Playgroud)